Selenium之Chrome選項和Desiredcapabilities: 禁用廣告,無痕瀏覽,無頭模式


ChromeOption類是什麼?

用於操做Chrome驅動程序的各類屬性。Chrome Option類一般與Desired Capabilities(指望功能)一塊兒使用。html

例如:
下面的例子展現了一種使用ChromeOptions類 打開Chrome瀏覽器而且最大化窗口的方法。咱們須要將ChromeOptions類的實例傳遞給Web驅動程序初始化。java

ChromeOptions options = new ChromeOptions()
options.addArgument("start-maximized");
ChromeDriver driver = new ChromeDriver(options);

下面是ChromeOptions類可用的和最經常使用的參數列表:web

  • start-maximized: 最大化模式打開chrome

  • Chrome incognito: 無痕瀏覽打開瀏覽器瀏覽器

  • headless: 無頭模式(後臺運行)微信

  • disable-extensions: 禁用Chrome瀏覽器上現有的擴展app

  • disable-popup-blocking: 禁用彈窗less

  • make-default-browser: 設置Chrome爲默認瀏覽器dom

  • version: 打印chrome瀏覽器版本編輯器

  • disable-infobars: 防止Chrome顯示「Chrome正在被自動化軟件控制」的通知

在本教程中,您將學習到:
Chrome Option類是什麼?
Desired Capabilities類
Chrome選項廣告擴展插件
ChromeOption無痕(隱身)瀏覽模式
ChromeOption的無頭模式


Desired Capabilities類

Desired capabilities類用於修改Web驅動程序的多個屬性。Desired capabilities類提供一組鍵值對key-value,用於更改web驅動程序的各個屬性,如瀏覽器名稱、瀏覽器平臺等。Desired capabilities類最經常使用的方法是setCapability方法。Desired capabilities最經常使用於Selenium Grid,其中須要在不一樣的瀏覽器上執行相同的測試用例。

例如:
下面的示例展現瞭如何使用Desired capabilities類使得chrome瀏覽器默認接受網站上的SSL證書。

// Create an object of desired capabilities class with Chrome driver
DesiredCapabilities SSLCertificate = DesiredCapabilities.chrome();
// Set the pre defined capability – ACCEPT_SSL_CERTS value to true
SSLCertificate.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
// Open a new instance of chrome driver with the desired capability
WebDriver driver = new ChromeDriver(SSLCertificate);

下面是最經常使用的預約義功能類型(pre-defined capability):


Chrome選項廣告擴展插件

Chrome瀏覽器的Adblocker擴展可使用ChromeOption和DesiredCapabilities類來處理。下面是使用DesiredCapabilities類訪問Chrome瀏覽器上的AdBlocker擴展的步驟:

Step 1) 在使用ChromeOption類以前,必須在Chrome瀏覽器上安裝AdBlocker擴展

Step 2) 提取與AdBlocker擴展名對應的CRX文件 http://crxextractor.com/

Step 3) 將下載的CRX文件路徑傳到Chrome Options類

Step 4) 使用DesiredCapabilities類和Chrome Options對象實例化Web驅動程序

例如:
下面的示例演示如何使用ChromeOption和DesiredCapabilities類在Chrome瀏覽器上激活廣告攔截器擴展:

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("Path to CRX File"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);

Extract CRX File:

下面的步驟演示了經過Web站點- http://crxextractor.com/經過廣告攔截器提取CRX文件的過程

Step 1) 轉到http://crxextractor.com/並單擊start按鈕

點擊開始加載

Step 2) 在文本框下輸入chrome擴展-廣告攔截器URL–Ad Blocker URL under the textbox.
https://chrome.google.com/webstore/detail/adblock-plus-free-ad-bloc/cfhdojbkjhnklbpkdaibdccddilifddb
或者
https://chrome.google.com/webstore/detail/adblock/gighmmpiobklfepjocnamgkkbiglidom
點擊 OK 按鈕

Step 3) 單擊OK按鈕,按鈕的標籤將更改成.CRX,以下所示: 點擊GET .CRX按鈕,將下載擴展名對應的CRX文件

GET 。CRX

下載的.CRX文件以下:
插件下載到本地

Step 4) 將文件保存到本地機器上,記錄保存的路徑。下一步是將保存的路徑傳遞到ChromeOptions類

注意:
若不能訪問Chrome官網,可到這裏去下載已經生成好的CRX 文件,兩個版本
AdBlock_Chrome廣告攔截器extension_3_54_0_0.crx
Adblock Plus - free ad blocker_extension_3_6_3_0.crx

示例代碼:

  1. 您將在http://demo.guru99.com/看到以下廣告:

    廣告
  2. 在Chrome瀏覽器上啓用AdBlocker擴展後,廣告將被禁用。

package adblock;
import java.io.File;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
public class AdblockDemo {
public static void main(String[] args)  {
    System.setProperty("webdriver.chrome.driver","X://chromedriver.exe");       
    ChromeOptions options = new ChromeOptions();
    options.addExtensions(new File("X://extension_3_40_1_0.crx")); 
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    options.merge(capabilities);
    ChromeDriver driver = new ChromeDriver(options);
    driver.get("http://demo.guru99.com/test/simple_context_menu.html");
    driver.manage().window().maximize();
    //driver.quit();
    }
}

上述代碼解讀:

  1. 首先,您須要使用set屬性方法設置chromedriver.exe文件的路徑,由於您正在使用Chrome瀏覽器進行測試;

  2. 您須要設置CRX文件的路徑來添加extensions方法;

  3. 而後須要建立DesiredCapabilities類的對象並將其傳遞給web驅動程序實例。從Selenium 3.8.1版本開始,驅動程序Capabilities類是不被推薦的,在將相同的參數傳遞給ChromeDriver構造函數以前,您須要將Capabilities對象與ChromeOption對象合併;

  4. 打開URL - http://demo.guru99.com/test/simple_context_menu.html,啓用廣告攔截器擴展;

  5. 最大化並關閉瀏覽器。

注意:
咱們是經過自動化腳本在Chrome瀏覽器上啓用AdBlocker擴展,而不是手動在Chrome瀏覽器上啓用AdBlocker擴展。CRX文件是一種使用自動化腳本訪問廣告攔截器擴展的方法。

輸出結果:
Chrome瀏覽器將啓用AdBlocker擴展,以下所示,沒有任何廣告:

將沒有廣告

ChromeOption無痕(隱身)瀏覽模式

Chrome選項可使用預先定義的參數-incognito無痕瀏覽

下面是完成一樣任務的示例代碼:

示例代碼:

package test;
import java.io.File;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;

public class Incognito{
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.setProperty("webdriver.chrome.driver","X://chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--incognito");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    options.merge(capabilities);
    ChromeDriver driver = new ChromeDriver(options);        
    driver.get("http://demo.guru99.com/test/simple_context_menu.html");
    driver.manage().window().maximize();        
    //driver.quit();
    }
    }

代碼解讀:

  1. 首先,您須要使用set屬性方法設置chromedriver.exe文件的路徑,由於您正在使用Chrome瀏覽器進行測試;

  2. 而後您須要建立一個ChromeOptions類的對象並將其傳遞給Web驅動程序實例。由於咱們想在incognito模式下打開Chrome瀏覽器,因此須要把參數-incognito傳遞給ChromeOptions類;

  3. 接下來,建立DesiredCapabilities 類的對象,並使用merge方法將DesiredCapabilities 類對象與ChromeOptions類對象合併;

  4. 須要建立一個ChromeDriver類的對象,並將ChromeOptions對象做爲參數傳遞;

  5. 最後,咱們須要傳遞URL -http://demo.guru99.com/test/simple_context_menu.html到driver.get方法;

  6. 最大化並關閉瀏覽器

輸出結果:
Chrome瀏覽器窗口將以隱身模式打開,以下圖所示:

隱身模式(無痕)

ChromeOption的無頭模式

無頭瀏覽器將在後臺運行,你將不會看到瀏覽器GUI或在界面上的操做。

在無頭模式下運行Chrome瀏覽器的Chrome選項能夠經過使用預約義的參數-headless來實現。
下面將介紹完成此任務的示例代碼:
例如:

package test;
import java.io.File;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;


public class HeadlessModeDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver","X://chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        options.merge(capabilities);
        ChromeDriver driver = new ChromeDriver(options);        
        driver.get("http://demo.guru99.com/");
        driver.manage().window().maximize();
        String title = driver.getTitle();
        System.out.println("Page Title: " +title);
        driver.quit();
        }
}

代碼解讀:

  1. 首先,您須要使用set屬性方法設置chromedriver.exe文件的路徑,由於您正在使用Chrome瀏覽器進行測試;

  2. 接下來,建立一個ChromeOptions類的對象並將其傳遞給Web驅動程序實例。因爲咱們想在headless模式下打開Chrome瀏覽器,咱們須要將參數-headless傳遞給ChromeOptions類;

  3. 接下來,建立DesiredCapabilities 類的對象,並使用merge方法將DesiredCapabilities 類對象與ChromeOptions類對象合併;

  4. 須要建立一個ChromeDriver類的對象,並將ChromeOptions對象做爲參數傳遞;

  5. 最後,咱們須要傳遞URL -http://demo.guru99.com/到driver.get方法;

  6. 打印頁面標題並關閉瀏覽器。

輸出結果:
瀏覽器將不可見的上述代碼,由於Chrome將在無頭模式下工做;頁面標題將被獲取並顯示以下圖:

打印標題

總結:

  • ChromeOption類用於操做ChromeDriver的各類屬性;

  • DesiredCapabilities類提供一組鍵值對,用於修改Web Driver的各個屬性,如瀏覽器名稱、瀏覽器平臺等;

  • 要操做Chrome瀏覽器的任何擴展插件,必須提取與擴展名對應的CRX文件,並將其添加到ChromeOptions類中;

  • --incognito--headless是ChromeOptions類爲在incognito模式和headless模式下使用Chrome瀏覽器提供的預約義參數。

    文章來源:https://www.guru99.com/selenium-tutorial.html


萬水千山老是情,點個「在看」 行不行!!!

 


本文分享自微信公衆號 - 軟測小生(ruancexiaosheng)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索