1.簡介
這一篇宏哥主要介紹webdriver在IE、Chrome和Firefox三個瀏覽器上處理不信任證書的情況,我們知道,有些網站打開是彈窗,SSL證書不可信任,但是你可以點擊高級選項,繼續打開不安全的鏈接。舉例來說,想必大家都應該用過前幾年的12306網站購票,點擊新版購票,是不是會出現如下的界面。宏哥又找了一個https的頁面,如下圖所示:
2.三種瀏覽器如何處理不受信任的證書
三種瀏覽器訪問網頁,彈出證書不信任,需要點擊下信任繼續訪問才行,多為訪問https的網頁。那么我們在做自動化測試的時候,如何跳過這一步驟,直接訪問到我們需要的頁面了,這個就是宏哥主要分享和講解的如何在三大瀏覽器跳過這一步驟。
3.Chrome瀏覽器
3.1代碼設計
3.2參考代碼
package lessons; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; /** * @author 北京-宏哥 * * 《手把手教你》系列技巧篇(四十三)-java+ selenium自動化測試-處理https 安全問題或者非信任站點-下篇(詳解教程) * * 2021年11月12日 */ public class SSLCertificate { public static void main(String[] args) throws Exception { ChromeOptions options = new ChromeOptions(); options.addArguments("--ignore-certificate-errors"); System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); // 打開帶capability設置選項的瀏覽器 WebDriver driver=new ChromeDriver(options); driver.manage().window().maximize(); driver.get("https://www.21xrx.com/"); } }
3.3運行代碼
1.運行代碼,右鍵Run AS->Java Appliance,控制台輸出,如下圖所示:
2.運行代碼后電腦端的瀏覽器的動作,如下小視頻所示:
4.小結
4.1Chrome瀏覽器遇到問題及解決辦法
1.Chrome以前遇到這種問題代碼這么寫,就可以現在就不行了,所以宏哥也換了一種方式。
package lessons; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; /** * @author 北京-宏哥 * * 《手把手教你》系列技巧篇(四十三)-java+ selenium自動化測試-處理https 安全問題或者非信任站點-下篇(詳解教程) * * 2021年11月12日 */ public class SSLCertificate { public static void main(String[] args) throws Exception { // 創建DesiredCapabilities類的一個對象實例 DesiredCapabilities cap=DesiredCapabilities.chrome(); // 設置變量ACCEPT_SSL_CERTS的值為True cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); // 打開帶capability設置選項的瀏覽器 WebDriver driver=new ChromeDriver(cap); driver.manage().window().maximize(); driver.get("https://www.21xrx.com/"); System.out.println(" 嘿嘿!宏哥,你已經成功跳過證書信任步驟啦!"); } }
但是運行代碼。Chrome動作(沒有跳過證書認證這一步驟)如下視頻所示:
4.2Chrome的options參數
Chrome Options參數收集---------------------------
-
0 --purge-memory-button 在Chrome的任務管理器中增加內存清理功能 序號 參數 說明 1 --allow-outdated-plugins 不停用過期的插件。 2 --allow-running-insecure-content 默認情況下,https 頁面不允許從 http 鏈接引用 javascript/css/plug-ins。添加這一參數會放行這些內容。 3 --allow-scripting-gallery 允許拓展腳本在官方應用中心生效。默認情況下,出於安全因素考慮這些腳本都會被阻止。 4 --disable-accelerated-video 停用 GPU 加速視頻。 5 --disable-dart 停用 Dart。 6 --disable-desktop-notifications 禁用桌面通知,在 Windows 中桌面通知默認是啟用的。 7 --disable-extensions 禁用拓展。 8 --disable-file-system 停用 FileSystem API。 9 --disable-preconnect 停用 TCP/IP 預連接。 10 --disable-remote-fonts 關閉遠程字體支持。SVG 中字體不受此參數影響。 11 --disable-speech-input 停用語音輸入。 12 --disable-web-security 不遵守同源策略。 13 --disk-cache-dir 將緩存設置在給定的路徑。 14 --disk-cache-size 設置緩存大小上限,以字節為單位。 15 --dns-prefetch-disable 停用DNS預讀。 16 --enable-print-preview 啟用打印預覽。 17 --extensions-update-frequency 設定拓展自動更新頻率,以秒為單位。 18 --incognito 讓瀏覽器直接以隱身模式啟動。 19 --keep-alive-for-test 最后一個標簽關閉后仍保持瀏覽器進程。(某種意義上可以提高熱啟動速度,不過你最好得有充足的內存) 20 --kiosk 啟用kiosk模式。(一種類似於全屏的瀏覽模式) 21 --lang 使用指定的語言。 22 --no-displaying-insecure-content 默認情況下,https 頁面允許從 http 鏈接引用圖片/字體/框架。添加這一參數會阻止這些內容。 23 --no-first-run 跳過 Chromium 首次運行檢查。 24 --no-referrers 不發送 Http-Referer 頭。 25 --no-sandbox 徹底停用沙箱。 26 --no-startup-window 啟動時不建立窗口。 27 --proxy-pac-url 使用給定 URL 的 pac 代理腳本。(也可以使用本地文件,如 --proxy-pac-url="file:\\\c:\proxy.pac") 28 --proxy-server 使用給定的代理服務器,這個參數只對 http 和 https 有效。(例如 --proxy-server=127.0.0.1:8087 ) 29 --single-process 以單進程模式運行 Chromium。(啟動時瀏覽器會給出不安全警告) 30 --start-maximized 啟動時最大化。 31 --user-agent 使用給定的 User-Agent 字符串 參數:--user-data-dir=UserDataDir 用途:自訂使用者帳戶資料夾(如:–user-data-dir="D:\temp\Chrome User Data") 參數:--process-per-tab 用途:每個分頁使用單獨進程 參數:--process-per-site 用途:每個站點使用單獨進程 參數:--in-process-plugins 用途:插件不啟用單獨進程 參數:--disable-popup-blocking 用途:禁用彈出攔截 參數:--disable-javascript 用途:禁用JavaScript 參數:--disable-java 用途:禁用Java 參數:--disable-plugins 用途:禁用插件 參數:–disable-images 用途:禁用圖像 參數:--omnibox-popup-count=”num” 用途:將網址列彈出的提示選單數量改為num個 參數:--enable-vertical-tabs 用途:調整chrome游覽器標簽存放在左邊,非頂部
5.擴展
5.1Safari瀏覽器(參考代碼,沒有親自實踐)
// Create object of DesiredCapabilities class DesiredCapabilities cap=DesiredCapabilities.safari(); // Set ACCEPT_SSL_CERTS variable to true cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); // Set the driver path System.setProperty("webdriver.safari.driver","Safari driver path"); // Open browser with capability WebDriver driver=new SafariDriver(cap);
6.總結
其實這一類問題,直接就用宏哥在IE瀏覽器那種執行JavaScript腳本的方法,無論遇到什么瀏覽器都可以解決的,就會這一招就可以打遍天下無敵手了。