• Selenium Video Tutorials

Selenium WebDriver - 浏览器选项



浏览器选项指的是所有浏览器共享的功能和能力。它有助于在任何浏览器上运行自动化测试时修改浏览器的设置和功能。默认情况下,Selenium Webdriver 从一个新的浏览器配置文件开始,没有任何关于 Cookie、历史记录等的预定义设置。

向浏览器添加扩展程序

让我们举一个例子,我们将使用 **ChromeOptions** 类启动带有 Selenium IDE 扩展程序的 Chrome 浏览器。每个 Chrome 扩展程序都应该有一个 .crx 文件。在这里,我们将获取 Selenium IDE Chrome 扩展程序的 .crx 文件,并将其存储在项目中的 Resources 文件夹中。

Selenium Browser Options 1

示例

package org.example;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.io.File;
import java.util.concurrent.TimeUnit;

public class ChromeOptns {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions class
      ChromeOptions opt = new ChromeOptions();

      // adding .crx extension
      opt.addExtensions(new File("./Resources/SeleniumIDE.crx"));

      // Initiate the Chrome Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 10 secs
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

      // Opening the webpage with Selenium IDE extension
      driver.get("https://tutorialspoint.com/selenium/practice/register.php");
   }
}

输出

Process finished with exit code 0

在这里,我们观察到 Chrome 浏览器启动了 Selenium IDE 扩展程序,并且信息栏显示 **Chrome 正在被自动化测试软件控制**。

Selenium Browser Options 2

最后,我们收到消息 **进程已完成,退出代码为 0**,表示代码成功执行。

以无头模式打开浏览器

在这个例子中,我们将使用 **EdgeOptions** 类在无头浏览器中启动一个应用程序。

package org.example;

import org.openqa.selenium.*;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import java.io.File;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class EdgeHeadless {
   public static void main(String[] args) throws InterruptedException {

      // object of EdgeOptions
      FirefoxOptions opt = new EdgeOptions();

      // browser in headless mode
      opt.addArguments("--headless=new");

      // Initiate the Webdriver
      WebDriver driver = new EdgeDriver(opt);

      // adding implicit wait of 10 secs
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

      // Opening the webpage with headless mode
      driver.get("https://tutorialspoint.com/selenium/practice/selenium_automation_practice.php");

      // getting page title
      System.out.println("Getting the page title: " + driver.getTitle());

      // Quit browser
      driver.quit();
   }
}

它将显示以下输出:

Getting the page title: Selenium Practice - Student Registration Form

在上面的示例中,我们观察到 Edge 浏览器以 **无头** 模式启动。我们还在控制台中获得了浏览器标题和消息 - **获取页面标题:Selenium 实践 - 学生注册表单**。

在浏览器中创建配置文件

让我们再举一个例子,我们将使用 **FirefoxOptions** 类在浏览器上拥有 Firefox 配置文件。

package org.example;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.ProfilesIni;
import java.util.concurrent.TimeUnit;

public class FirefoxProfile {
   public static void main(String[] args) throws InterruptedException {

      // object of FirefoxOptions class
      FirefoxOptions opt = new FirefoxOptions();

      // object of ProfilesIni
      ProfilesIni prof = new ProfilesIni();

      // get profile
      FirefoxProfile p = prof.getProfile("<profileName>");
      opt.setProfile(p);

      // Initiate the Webdriver
      WebDriver driver = new FirefoxDriver(opt);

      // adding implicit wait of 20 secs
      driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://tutorialspoint.com/selenium/practice/selenium_automation_practice.php");

      // obtain page title
      System.out.println("Obtain the page title: " + driver.getTitle());

      // Quit browser
      driver.quit();
   }
}

它将显示以下输出:

Obtain the page title: Selenium Practice - Student Registration Form

在这里,Firefox 浏览器使用创建的配置文件打开。我们还在控制台中获得了浏览器标题和消息 - **获取页面标题:Selenium 实践 - 学生注册表单**。

处理 Edge 中的 SSL 证书错误

为了克服 Edge 浏览器中的 SSL 证书错误,我们将使用 EdgeOptions 和 DesiredCapabilities 类。

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.EdgeDriver;
import org.openqa.selenium.firefox.EdgeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.util.concurrent.TimeUnit;

public class SSLEdge {
   public static void main(String[] args) throws InterruptedException {
   
      // object of Desired Capabilities class 
      DesiredCapabilities dc = new DesiredCapabilities();
      dc.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);
      
      // object Edge Options class
      EdgeOptionsOptions opt = new EdgeOptions();
      opt.merge(dc);
      
      // Initiate the Webdriver along with options
      WebDriver driver = new EdgeDriver(opt);
      
      // adding implicit wait of 5 secs
      driver.manage().timeouts().implicitlyWait(55, TimeUnit.SECONDS);
      
      // launch application with SSL certificate error
      driver.get("https://expired.badssl.com");
      
      // get browser title
      System.out.println("Get Browser title in Edge: " + driver.getTitle());
      
      // quit the browser
      driver.quit();
   }
}

它将显示以下输出:

Get Browser title in Edge: Privacy error

在这里,我们摆脱了 Edge 中的 SSL 证书错误并启动了应用程序。然后在控制台中获得了浏览器标题和消息 - **Edge 中的浏览器标题:隐私错误**。

页面加载策略

浏览器中有多种页面加载策略可用,分别是 NORMAL(浏览器中的默认页面加载设置)、EAGER 和 NONE。

package org.example;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class ChromePageLoadNormal {
   public static void main(String[] args) throws InterruptedException {
   
      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      
      // setting pageloadStrategy to normal
      opt.setPageLoadStrategy(PageLoadStrategy.NORMAL);
      
      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);
      
      // Opening the webpage
      driver.get("https://tutorialspoint.com/selenium/practice/register.php");
      
      // quit browser
      driver.quit();
   }
}

它将显示以下输出:

Process finished with exit code 0

在上面的示例中,我们设置了浏览器选项,使页面加载策略设置为 NORMAL。如果需要将页面加载策略设置为 EAGER,则需要进行以下代码更改:

// object of ChromeOptions
ChromeOptions opt = new ChromeOptions();

// setting pageloadStrategy to EAGER
opt.setPageLoadStrategy(PageLoadStrategy.EAGER);

// Initiate the Webdriver
WebDriver driver = new ChromeDriver(opt);

如果需要将页面加载策略设置为 NONE,则需要进行以下代码更改:

// object of ChromeOptions
ChromeOptions opt = new ChromeOptions();

// setting pageloadStrategy to NONE
opt.setPageLoadStrategy(PageLoadStrategy.NONE);

// Initiate the Webdriver
WebDriver driver = new ChromeDriver(opt);

结论

本教程全面介绍了 Selenium Webdriver 浏览器选项。我们已经通过示例演示了如何向浏览器添加配置文件和扩展程序,如何在无头模式下启动浏览器,如何处理 SSL 证书错误以及如何使用浏览器选项和 Selenium Webdriver 进行页面加载策略。这使您能够深入了解 Selenium Webdriver 中的浏览器选项。明智的做法是不断练习您所学到的知识,并探索与 Selenium 相关的其他知识,以加深您的理解并拓宽您的视野。

广告