Selenium Webdriver 中的 Chrome 选项和所需功能

什么是 Chrome 选项类?

ChromeOptions 类是 Selenium WebDriver 中的一个概念,用于操作 Chrome 驱动程序的各种属性。Chrome 选项类通常与所需功能结合使用,用于自定义 Chrome 驱动程序会话。它帮助您执行各种操作,例如以最大化模式打开 Chrome、禁用现有扩展程序、禁用弹出窗口等。

示例

以下示例展示了使用 ChromeOptions 类以最大化模式打开 Chrome 浏览器的方法。我们需要将 ChromeOptions 类的实例传递给 Web 驱动程序初始化。

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

以下是 ChromeOptions 类可用且最常用的参数列表

  • start-maximized:以最大化模式打开 Chrome
  • incognito:以无痕模式打开 Chrome
  • headless:以无头模式打开 Chrome
  • disable-extensions:禁用 Chrome 浏览器上现有扩展程序
  • disable-popup-blocking:禁用 Chrome 浏览器上显示的弹出窗口
  • make-default-browser:将 Chrome 设置为默认浏览器
  • version:打印 Chrome 浏览器版本
  • disable-infobars:阻止 Chrome 显示“Chrome 正在由自动化软件控制”的通知

所需功能类

Desired Capabilities 类用于修改 Web 驱动程序的多个属性。它提供键值对来更改 Web 驱动程序的单个属性,例如浏览器名称、浏览器平台等。Desired Capabilities 类的一个常用方法是 setCapability 方法。它主要与 Selenium Grid 一起使用,在 Selenium Grid 中,同一个测试用例需要在不同的浏览器上执行。

示例

以下示例展示了如何使用 Chrome 专用所需功能类,默认情况下使 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);

以下是最常用的预定义功能类型。

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

用于 Adblocker 扩展程序的 Chrome 选项

Chrome 浏览器的 Adblocker 扩展程序可以通过 ChromeDriver 选项和 Desired Capabilities 类进行处理。以下是使用 Desired Capabilities 类访问 Chrome 浏览器上的 AdBlocker 扩展程序的步骤。

步骤 1) 在使用 Chrome Options 类之前,必须在 Chrome 浏览器上安装 AdBlocker 扩展程序

步骤 2) 通过 http://crxextractor.com/ 提取与 AdBlocker 扩展程序对应的 CRX 文件

步骤 3) 将下载的 CRX 文件路径传递给 Chrome Options 类

步骤 4) 使用所需功能类和 Selenium 对象中的 Chrome 选项实例化 Web 驱动程序

示例

以下示例演示了如何使用 Chrome Options 和 Desired Capabilities 类在 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);

提取 CRX 文件

以下步骤演示了通过网站 http://crxextractor.com/ 从 Ad Blocker 提取 CRX 文件的过程

步骤 1) 访问 http://crxextractor.com/ 并点击开始按钮

Extract CRX File

步骤 2) 在文本框中输入 Chrome 扩展程序 – Ad Blocker URL。Chrome 网上应用店中 Adblock 的 URL 是 https://chrome.google.com/webstore/detail/adblock-%E2%80%94-best-ad-blocker/gighmmpiobklfepjocnamgkkbiglidom

并点击确定

Extract CRX File

步骤 3) 点击“确定”按钮后,按钮的标签将更改为“获取 .CRX”,如下图所示。点击“获取 .CRX”按钮,将下载与扩展程序对应的 CRX 文件

Extract CRX File

步骤 4) 将文件保存到本地机器,记下保存的路径。下一步是将保存的路径传递给 Chrome Options 类

示例代码

  1. 您将看到 https://demo.guru99.com/ 上的广告,如下图所示

Extract CRX File

  1. 在 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("https://demo.guru99.com/test/simple_context_menu.html");
	driver.manage().window().maximize();
	//driver.quit();
	}
	
}

代码解释:

  1. 首先,您需要使用 set 属性方法设置 chromedriver.exe 文件的路径,因为您正在使用 Chrome 浏览器进行测试
  2. 您需要设置 CRX 文件的路径以添加扩展程序方法
  3. 然后您需要创建 Selenium 类中 Chrome Desired Capabilities 的对象,并将其传递给 Web 驱动程序实例。从 Selenium 3.8.1 版本开始,驱动程序功能类已弃用,您需要在将功能对象作为参数传递给 Chrome Driver 构造函数之前,将其与 Chrome Options 对象合并
  4. 打开 URL – https://demo.guru99.com/test/simple_context_menu.html 并启用 Ad Blocker 扩展程序
  5. 最大化并关闭浏览器

注意:我们通过自动化脚本在 Chrome 浏览器上启用 AdBlocker 扩展程序,而不是手动启用 Chrome 浏览器上的 Adblocker 扩展程序。CRX 文件是使用自动化脚本访问广告拦截器扩展程序的一种方式

输出

Chrome 浏览器将启用 AdBlocker 扩展程序,如下图所示,没有任何广告

Extract CRX File

用于无痕模式的 Chrome 选项

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("https://demo.guru99.com/test/simple_context_menu.html");
	driver.manage().window().maximize();		
	//driver.quit();
	}
	}

代码解释:

  1. 首先,您需要使用 set 属性方法设置 chromedriver.exe 文件的路径,因为您正在使用 Chrome 浏览器进行测试
  2. 然后您需要创建 Chrome Options 类的对象并将其传递给 Web 驱动程序实例。由于我们希望以无痕模式打开 Chrome 浏览器,您需要将参数 –incognito 传递给 Chrome Options 类。
  3. 接下来,创建 Desired Capabilities 类的对象,并使用 merge 方法将 Desired Capabilities 类对象与 Chrome Options 类对象合并
  4. 您需要创建 Chrome Driver 类的对象,并将 Chrome Options 对象作为参数传递
  5. 最后,我们需要将 URL – https://demo.guru99.com/test/simple_context_menu.html 传递给 driver.get 方法
  6. 最大化并关闭浏览器

输出

Chrome 浏览器窗口将以无痕模式打开,如下图所示

Chrome Options For Incognito Mode

用于无头 Chrome 的 Chrome 选项

无头浏览器在后台运行。您将看不到浏览器 GUI 或在其上进行的操作。

通过使用预定义参数 –headless 可以实现无头模式下运行 Chrome 浏览器的 Chrome 选项。

下面提到了实现此目的的示例代码。

示例

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("https://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. 接下来,创建 Chrome Options 类的对象并将其传递给 Web 驱动程序实例。由于我们希望以无头模式打开 Chrome 浏览器,我们需要将参数 –headless 传递给 Chrome Options 类。
  3. 创建 DesiredCapabilities Chrome 类的对象,并使用 merge 方法将 Desired Capabilities 类对象与 Chrome Options 类对象合并
  4. 创建 Chrome Driver 类的对象,并将 Chrome Options Selenium 对象作为参数传递
  5. 最后,我们需要将 URL – https://demo.guru99.com/ 传递给 driver.get 方法
  6. 打印页面标题并关闭浏览器

输出

对于上述代码,浏览器将不可见,因为 Chrome 将在无头模式下工作。页面标题将被获取并显示如下。

Chrome Options For Headless Chrome

摘要

  • Selenium Chrome Options 类用于操作 Chrome 驱动程序的各种属性
  • Desired Chrome Capabilities 类提供一组键值对来修改 Web 驱动程序的单个属性,例如浏览器名称、浏览器平台等。
  • 要操作 Chrome 浏览器的任何扩展程序,必须提取与扩展程序对应的 CRX 文件,并将其添加到 Chrome Options 类中
  • –incognito 和 –headless 是 Chrome Options 类提供的预定义参数,用于以无痕模式和无头模式使用 Chrome 浏览器