《手把手教你》系列技巧篇(四十四)-java+ selenium自動化測試-處理https 安全問題或者非信任站點-下篇(詳解教程)

巨集哥發表於2021-11-22

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

相關文章