Selenium 简明教程
Selenium WebDriver - Headless Execution
Selenium Webdriver 可用于在任何浏览器上进行测试的无头执行。无头执行是在浏览器不可见的情况下进行测试执行的一种方式。
What is Headless Execution?
现在首选无头执行,因为在这种情况下测试用例的执行速度更快,因为在此过程中不会呈现网页。此外,在无头模式下执行测试时,对系统资源的要求较少。当我们运行测试以从 Web 应用程序中抓取数据时,通常首选无头执行。
此外,如果我们触发涉及多个浏览器的并行执行,那么如果我们进行无头执行,则资源利用就会受到限制。
但是,我们无法使用无头执行模式对测试进行实时调试,也无法向开发者报告使用无头执行模式的失败测试中的问题。
Example 1
让我们以以下页面为例,在该页面中,我们在 headless 模式下使用 Chrome 浏览器和 4 以上版本的 Selenium 启动带有 URL 的应用程序。可以使用 Selenium Webdriver 中的 ChromeOptions 类实现 headless 执行。
然后,获得其页面标题: Selenium Practice - Student Registration Form 。接下来,我们在 Name 标签旁边的输入框中输入文本 Selenium 。
然后,我们将点击 Login 按钮,然后我们将导航到另一个页面,该页面的浏览器标题为 Selenium Practice - Login 。
代码实现
package org.example;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.chrome.ChromeOptions;
public class Headless {
public static void main(String[] args) throws InterruptedException {
// setting Chrome options to browser in headless mode
ChromeOptions opt = new ChromeOptions();
opt.addArguments("--headless=new");
// Initiate the Webdriver
WebDriver driver = new ChromeDriver(opt);
// adding implicit wait of 20 secs
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
// Opening the webpage
driver.get("https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php");
// getting page title
System.out.println("Getting the page title: " + driver.getTitle());
// identify edit box then enter text
WebElement e = driver.findElement(By.xpath("//*[@id='name']"));
e.sendKeys("Selenium");
// get test entered
System.out.println("Value entered: " + e.getAttribute("value"));
// perform click
WebElement b = driver.findElement(By.xpath("//*[@id='collapseTwo']/div/ul/li[2]/a"));
b.click();
// getting page title after click
System.out.println("Getting the current title after click: " + driver.getTitle());
// Quitting browser
driver.quit();
}
}
在 pom.xml 文件中添加的依赖项:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SeleniumJava</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.11.0</version>
</dependency>
</dependencies>
</project>
Getting the page title: Selenium Practice - Student Registration Form
Value entered: Selenium
Getting the current title after click: Selenium Practice - Login
Process finished with exit code 0
在以上示例中,我们在浏览器上的 headless 模式下启动了一个 URL,并使用控制台中显示的消息获得了浏览器页面标题 - Getting the page title: Selenium Practice - Student Registration Form 。然后,我们在输入框中输入文本 Selenium,并使用控制台中显示的消息检索输入的值 - Value entered: Selenium 。之后,我们点击登录链接,并获得了导航到下一页面后的当前页面标题以及控制台中的消息: Getting the current title after click: Selenium - Selenium Practice - Login 。
Example 2
让我们以以下页面为例,在该页面中,我们将启动一个应用程序,以在 Chrome 浏览器中以 headless 模式打开 URL,并获取其页面标题 - Selenium Practice - Date Picker 。这将通过使用 ChromeOptions 类来完成。然后将值 --headless=new 传递给 addArguments 方法。
代码实现
package org.example;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.chrome.ChromeOptions;
public class HeadlessBrow {
public static void main(String[] args) throws InterruptedException {
// setting Chrome options to browser in headless mode
ChromeOptions opt = new ChromeOptions();
opt.addArguments("--headless=new");
// Initiate the Webdriver
WebDriver driver = new ChromeDriver(opt);
// adding implicit wait of 20 secs
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
// Opening the webpage
driver.get("https://www.tutorialspoint.com/selenium/practice/date-picker.php");
// getting page title
System.out.println("Getting the page title: " + driver.getTitle());
// Quitting browser
driver.quit();
}
}
Getting the page title: Selenium Practice - Date Picker
在以上示例中,我们在浏览器上的 headless 模式下启动了一个 URL,并使用控制台中显示的消息获得了浏览器页面标题 - Getting the page title: Selenium Practice - Date Picker 。