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指令碼的方法,無論遇到什麼瀏覽器都可以解決的,就會這一招就可以打遍天下無敵手了。