ChromeOptions & Desiredcapabilities: AdBlocker, Incognito, Headless

本文首发于微信公众号: 【软测小生】

Chrome Option类是什么?

用于操作Chrome驱动程序的各种属性。Chrome Option类通常与Desired Capabilities(期望功能)一起使用。

例如:
下面的例子展示了一种使用ChromeOptions类 打开Chrome浏览器并且最大化窗口的方法。我们需要将ChromeOptions类的实例传递给Web驱动程序初始化。

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

下面是ChromeOptions类可用的和最常用的参数列表:

  • start-maximized: 最大化模式打开
  • Chrome incognito: 无痕浏览打开浏览器
  • headless: 无头模式(后台运行)
  • disable-extensions: 禁用Chrome浏览器上现有的扩展
  • disable-popup-blocking: 禁用弹窗
  • make-default-browser: 设置Chrome为默认浏览器
  • 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):

Capability Name Description
ACCEPT_SSL_CERTS 此属性告诉浏览器默认接受SSL证书
PLATFORM_NAME 此属性用于设置访问Web站点的操作系统平台
BROWSER_NAME 此属性用于设置Web驱动程序实例的浏览器名称
VERSION 此属性用于设置浏览器版本

Chrome选项广告扩展插件

关于扩展插件,这里介绍之前的一篇文章:
Selenium启动Chrome插件(Chrome Extensions)

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按钮

ChromeOptions & Desiredcapabilities: AdBlocker, Incognito, Headless_第1张图片
在这里插入图片描述

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文件

ChromeOptions & Desiredcapabilities: AdBlocker, Incognito, Headless_第2张图片
在这里插入图片描述

下载的.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扩展,如下所示,没有任何广告:

ChromeOptions & Desiredcapabilities: AdBlocker, Incognito, Headless_第3张图片
在这里插入图片描述

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浏览器窗口将以隐身模式打开,如下图所示:

ChromeOptions & Desiredcapabilities: AdBlocker, Incognito, Headless_第4张图片
在这里插入图片描述

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将在无头模式下工作;页面标题将被获取并显示如下图:

ChromeOptions & Desiredcapabilities: AdBlocker, Incognito, Headless_第5张图片
在这里插入图片描述

总结:

  • ChromeOption类用于操作ChromeDriver的各种属性;
  • DesiredCapabilities类提供一组键值对,用于修改Web driver的各个属性,如浏览器名称、浏览器平台等;
  • 要操作Chrome浏览器的任何扩展插件,必须提取与扩展名对应的CRX文件,并将其添加到Chrome Options类中;
  • --incognito--headless是ChromeOptions类为在incognito模式和headless模式下使用Chrome浏览器提供的预定义参数。

你可能感兴趣的:(ChromeOptions & Desiredcapabilities: AdBlocker, Incognito, Headless)