WebDriver 以本地化方式驱动浏览器,就像用户在本地或使用 Selenium 服务器的远程机器上所做的那样,这标志着浏览器自动化的飞跃。
Selenium WebDriver 指的是语言绑定和各个浏览器控制代码的实现。 这通常被称为 WebDriver。
Selenium WebDriver 是 W3C 推荐标准
WebDriver 被设计成一个简单和简洁的编程接口。
WebDriver 是一个简洁的面向对象 API。
它能有效地驱动浏览器。
WebDriver 以本地化方式驱动浏览器,就像用户在本地或使用 Selenium 服务器的远程机器上所做的那样,这标志着浏览器自动化的飞跃。
Selenium WebDriver 指的是语言绑定和各个浏览器控制代码的实现。 这通常被称为 WebDriver。
Selenium WebDriver 是 W3C 推荐标准
WebDriver 被设计成一个简单和简洁的编程接口。
WebDriver 是一个简洁的面向对象 API。
它能有效地驱动浏览器。
Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 WebDriver 是一个 API 和协议,它定义了一个语言中立的接口,用于控制 web 浏览器的行为。 每个浏览器都有一个特定的 WebDriver 实现,称为驱动程序。 驱动程序是负责委派给浏览器的组件,并处理与 Selenium 和浏览器之间的通信。
这种分离是有意识地努力让浏览器供应商为其浏览器的实现负责的一部分。 Selenium 在可能的情况下使用这些第三方驱动程序, 但是在这些驱动程序不存在的情况下,它也提供了由项目自己维护的驱动程序。
Selenium 框架通过一个面向用户的界面将所有这些部分连接在一起, 该界面允许透明地使用不同的浏览器后端, 从而实现跨浏览器和跨平台自动化。
Selenium的设置与其他商业工具有很大不同. 在开始编写 Selenium 代码之前, 您必须安装所选语言的相关类库, 目标浏览器的驱动程序.
请点击以下链接,开始使用 Selenium WebDriver.
如果您希望从低代码/录制和播放工具开始,请查看 Selenium IDE
开始工作后,如果想扩展您的测试,请查看 Selenium Grid.
首先,您需要为自动化项目安装 Selenium 绑定库。 库的安装过程取决于您选择使用的语言。
查看该库所支持java的最低版本 here.
应熟练掌握build tool以安装支持java的Selenium库
具体的依赖位于项目中的 pom.xml 文件:
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
</dependency><?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>dev.selenium</groupId>
<artifactId>selenium-examples</artifactId>
<version>1.0.0</version>
<properties>
<surefire.parallel>1</surefire.parallel>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<selenium.version>4.46.0</selenium.version>
</properties>
<repositories>
<repository>
<name>Central Portal Snapshots</name>
<id>central-portal-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-grid</artifactId>
<version>${selenium.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>6.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.titusfortner</groupId>
<artifactId>selenium-logger</artifactId>
<version>2.4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.6</version>
<configuration>
<properties>
<configurationParameters>
junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
junit.jupiter.execution.parallel.config.strategy = fixed
junit.jupiter.execution.parallel.config.fixed.parallelism = ${surefire.parallel}
junit.jupiter.execution.parallel.config.fixed.max-pool-size = ${surefire.parallel}
</configurationParameters>
</properties>
<rerunFailingTestsCount>3</rerunFailingTestsCount>
</configuration>
</plugin>
</plugins>
</build>
</project>
具体的依赖位于项目中的 build.gradle 文件中的 testImplementation:
dependencies {plugins {
id 'java'
}
group 'dev.selenium'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
ext['seleniumVersion'] = System.getProperty('selenium.version', '4.46.0')
dependencies {
testImplementation "org.seleniumhq.selenium:selenium-java:${seleniumVersion}"
testImplementation "org.seleniumhq.selenium:selenium-grid:${seleniumVersion}"
testImplementation platform("org.junit:junit-bom:6.1.2")
testImplementation 'org.junit.jupiter:junit-jupiter-engine'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testImplementation 'com.titusfortner:selenium-logger:2.4.0'
}
test {
useJUnitPlatform()
}
该库所支持的Python版本最低版本可以在
支持的Python版本 章节中找到 PyPi
这里提供了几种不同的方式来安装 Selenium .
pip install selenium
此外你可以从这里下载 PyPI Built Distribution (selenium-x.x.x.-py3-none-any.whl) 并通过: pip 文件安装:
pip install selenium-x.x.x.-py3-none-any.whl
为了在项目中使用它,需要将它添加到 requirements.txt 文件中:
selenium==4.46.0selenium==4.46.0
pytest==9.1.1
trio==0.33.0
pytest-trio==0.8.0
pytest-rerunfailures==16.4
flake8==7.3.0
requests==2.34.2
tox==4.56.4
pytest-xdist==3.8.0
Selenium 所支持的所有平台的列表一览 见诸于 Nuget
该处阐述了一些安装Selenium的选项.
Install-Package Selenium.WebDriver
dotnet add package Selenium.WebDriver
在 csproj 文件里, 具体的依赖 PackageReference(包参数) 位于 ItemGroup (项目组)中:
<PackageReference Include="Selenium.WebDriver" Version="4.46.0" /><Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.7.1" />
<PackageReference Include="MSTest.TestAdapter" Version="3.6.0" />
<PackageReference Include="MSTest.TestFramework" Version="3.6.0" />
<PackageReference Include="Selenium.Support" Version="4.46.0" />
<PackageReference Include="Selenium.WebDriver" Version="4.46.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="LocalPackages" />
</ItemGroup>
</Project>
更多的注意事项,适用于使用 Visual Studio Code (vscode) 和 C#
安装兼容的 .NET SDK 作为章节的先决条件
同时安装 vscode 的扩展 (Ctrl-Shift-X)以适配 C# 和 NuGet
可以遵照此处进行 操作指南
创建 C# 控制台项目并运行 “Hello World”.
你也可以用命令行 dotnet new NUnit 创建NUnit初阶项目.
确保文件 %appdata%\NuGet\nuget.config 已经配置完成,就像某位开发者报告的问题一样,它可能因为某种因素被自动清空.
如果 nuget.config 是空的,或者未配置的,那么 .NET 创建的Selenium项目可能失败.
加入如下章节到文件 nuget.config 如果出现清空的情况:
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
</packageSources>
...
更多关于 nuget.config 的信息 点击.
你可能需要按照自己的需求配置 nuget.config .
现在,返回 vscode ,按下 Ctrl-Shift-P, 然后键入 “NuGet Add Package”, 并选择自己需要的 Selenium 包,例如 Selenium.WebDriver.
按下回车并选择版本.
现在你可以使用说明文档中关于 C# vscode下的案例了.
你可以查看 Selenium 对 Ruby 版本支持和最低支持. 具体位于 rubygems.org
Selenium 可以使用两种不同方法安装.
gem install selenium-webdriver
gem 'selenium-devtools', '= 0.150.0'# frozen_string_literal: true
source 'https://rubygems.org'
gem 'ffi', '~> 1.15', '>= 1.15.5' if Gem.win_platform? # Windows only
gem 'rake', '~> 13.0'
gem 'rspec', '~> 3.0'
gem 'rubocop', '~> 1.35'
gem 'rubocop-rspec', '~> 3.0'
gem 'selenium-devtools', '= 0.150.0'
gem 'selenium-webdriver', '= 4.46.0'
You can find the minimum required version of Node for any given version of Selenium in the
你可以在此查看 Selenium 对 Node 的版本支持情况
位于 Node Support Policy 中的相关章节 npmjs
Selenium is typically installed using npm.
npm install selenium-webdriver
在你的项目 package.json, 必须加入到 dependencies:
"mocha": "11.7.6"{
"name": "javascript-examples",
"version": "1.0.0",
"scripts": {
"test": "npx mocha test/**/*.spec.js --timeout 120000 --parallel --retries 2"
},
"author": "The Selenium project",
"license": "Apache-2.0",
"dependencies": {
"assert": "2.1.0",
"selenium-webdriver": "4.46.0"
},
"devDependencies": {
"mocha": "11.7.6"
}
}
当你完成 Selenium安装 后, 便可以开始书写Selenium脚本了.
Selenium所做的一切, 就是发送给浏览器命令, 用以执行某些操作或为信息发送请求. 您将使用Selenium执行的大部分操作, 都是以下基本命令的组合
点击 “View full example on GitHub” 的链接以查看上下文中的代码.
关于如何启动会话,请浏览我们的文档 驱动会话
WebDriver driver = new ChromeDriver();package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
driver = webdriver.Chrome()from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
IWebDriver driver = new ChromeDriver();using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}driver = Selenium::WebDriver.for :chromerequire 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
driver = await new Builder().forBrowser(Browser.CHROME).build();const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
driver = ChromeDriver()package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}在本例中, 我们 导航 到一个网页.
driver.get("https://www.selenium.dev/selenium/web/web-form.html");package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
driver.get("https://www.selenium.dev/selenium/web/web-form.html")from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}driver.get('https://www.selenium.dev/selenium/web/web-form.html')require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
driver.get("https://www.selenium.dev/selenium/web/web-form.html")package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}您可以请求一系列关于浏览器的信息 , 包括窗口句柄、浏览器尺寸/位置、cookie、警报等.
driver.getTitle();package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
title = driver.titlefrom selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
var title = driver.Title;using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}driver.titlerequire 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
let title = await driver.getTitle();const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
val title = driver.titlepackage dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}将代码与浏览器的当前状态同步 是Selenium面临的最大挑战之一, 做好它是一个高级主题.
基本上, 您希望在尝试定位元素之前, 确保该元素位于页面上, 并且在尝试与该元素交互之前, 该元素处于可交互状态.
隐式等待很少是最好的解决方案, 但在这里最容易演示, 所以我们将使用它作为占位符.
阅读更多关于等待策略 的信息.
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
driver.implicitly_wait(0.5)from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}driver.manage.timeouts.implicit_wait = 500require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
await driver.manage().setTimeouts({implicit: 500});const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}大多数Selenium会话中的主要命令都与元素相关, 如果不先找到元素, 就无法与之交互.
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}对于一个元素, 只有少数几个操作可以执行, 但您将经常使用它们.
textBox.sendKeys("Selenium");
submitButton.click();package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
text_box.send_keys("Selenium")
submit_button.click()from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
textBox.SendKeys("Selenium");
submitButton.Click();using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}text_box.send_keys('Selenium')
submit_button.clickrequire 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
await textBox.sendKeys('Selenium');
await submitButton.click();const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
textBox.sendKeys("Selenium")
submitButton.click()package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}元素存储了很多被请求的信息.
WebElement message = driver.findElement(By.id("message"));
message.getText();package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
message = driver.find_element(by=By.ID, value="message")
text = message.textfrom selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
var message = driver.FindElement(By.Id("message"));
var value = message.Text;using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}message = driver.find_element(id: 'message')
message.textrequire 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
let message = await driver.findElement(By.id('message'));
let value = await message.getText();const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
val message = driver.findElement(By.id("message"))
val value = message.getText()package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}这将结束驱动程序进程, 默认情况下, 该进程也会关闭浏览器. 无法向此驱动程序实例发送更多命令.
driver.quit();package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
driver.quit()from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
title = driver.title
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
text = message.text
driver.quit()
driver.Quit();using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
}driver.quitrequire 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get('https://www.selenium.dev/selenium/web/web-form.html')
driver.title
driver.manage.timeouts.implicit_wait = 500
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = driver.find_element(id: 'message')
message.text
driver.quit
await driver.quit();const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
driver.quit()package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}mvn exec:java -D"exec.mainClass"="dev.selenium.getting_started.FirstScript" -D"exec.classpathScope"=test# Running Selenium Java Tests
The following steps will guide you on how to
run Selenium Java tests using a repository
of `SeleniumHQ/seleniumhq.github.io` examples.
## Initial Setup
### Prerequisites
Ensure that Java Development Kit (JDK) and Maven
are installed on your system. If they are not installed,
you will need to download and install them. You can
find detailed installation guides for both on their
respective official sites.
### Clone the repository
First, we need to get the Selenium Java examples
on your local machine. This can be done by
cloning the `SeleniumHQ/seleniumhq.github.io` Git repository.
Run the following command in your terminal:
```bash
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
## Navigate to the java directory
After cloning the repository, navigate into the
directory where the Selenium Java examples are
located. Run the following command:
```bash
cd seleniumhq.github.io/examples/java
```
## Running the Tests
### Install dependencies
Before running the tests, we need to install all
necessary dependencies. Maven, a software
project management tool, can do this for us.
Run the following command:
```bash
mvn test-compile
```
### Run all tests
To verify if everything is installed correctly and
functioning properly, we should run all
available tests. This can be done with the following command:
```bash
mvn test
```
Please be patient! If this is your first time running these tests,
it might take a while to download and verify all necessary browser drivers.
## Execute a specific example
To run a specific Selenium Java example, use the following command:
```bash
mvn exec:java -D"exec.mainClass"="dev.selenium.getting_started.FirstScript" -D"exec.classpathScope"=test
```
Make sure to replace `dev.selenium.getting_started.FirstScript` with the path and name of the example you want to run.pytest path/to/test_script.py# Running tests from Selenium Python examples
#### 1. Clone this repository
```
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
#### 2. Navigate to `python` directory
```
cd seleniumhq.github.io/examples/python
```
#### 3. Create a virtual environment
- On Windows:
```
py -m venv venv
venv\Scripts\activate
```
- On Linux/Mac:
```
python3 -m venv venv
source venv/bin/activate
```
#### 4. Install dependencies:
```
pip install -r requirements.txt
```
> for help, see: https://packaging.python.org/en/latest/tutorials/installing-packages
#### 5. Run tests
- Run all tests with the default Python interpreter:
```
pytest
```
- Run all tests with every installed/supported Python interpreter:
```
tox
```
> Please have some patience - If you are doing it for the first time, it will take a little while to download the browser drivers
- Run a specific example:
```
pytest path/to/test_script.py
```
> Make sure to replace `path/to/test_script.py` with the path and name of the example you want to run
dotnet test --filter "FullyQualifiedName=SeleniumDocs.GettingStarted.UsingSeleniumTest.EightComponents"# Running Selenium .NET (C#) Tests
The following steps will guide you on how to
run Selenium .NET (C#) tests using the examples
from the `SeleniumHQ/seleniumhq.github.io` repository.
## Initial Setup
### Prerequisites
Ensure you have the following installed:
- [.NET SDK (8.0 or later)](https://dotnet.microsoft.com/en-us/download)
- An IDE like [Visual Studio](https://visualstudio.microsoft.com/) or [Visual Studio Code](https://code.visualstudio.com/)
- [.NET CLI tools](https://learn.microsoft.com/en-us/dotnet/core/tools/)
### Clone the repository
Clone the Selenium documentation repository to your local machine:
```bash
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
## Navigate to the .NET directory
### Change into the .NET examples directory:
```bash
cd seleniumhq.github.io/examples/dotnet/SeleniumDocs
```
## Running the Tests
### Restore dependencies
Install necessary dependencies using the .NET CLI:
```bash
dotnet restore
```
### Run all tests
To run all available tests:
```bash
dotnet test
```
### Run a Specific Test Method
To run a specific test method using its fully qualified name:
```bash
dotnet test --filter "FullyQualifiedName=Namespace.ClassName.MethodName"
```
For example:
```bash
dotnet test --filter "FullyQualifiedName=SeleniumDocs.GettingStarted.UsingSeleniumTest.EightComponents"
```
You can also filter by test name only (if it's unique):
```bash
dotnet test --filter "Name=EightComponents"
```ruby example_script.rb# Running all tests from Selenium ruby example
Follow these steps to run all test example from selenium ruby
1. Clone this repository
```
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
2. Navigate to `ruby` directory
```
cd seleniumhq.github.io/examples/ruby
```
3. Install dependencies using bundler
```
bundler install
```
4. Run all tests
```
bundle exec rspec
```
> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
# Execute a ruby script
Use this command to run a ruby script and follow the first script example
```
ruby example_script.rb
```node example_script.spec.js# Running all tests from Selenium javascript example
Follow these steps to run all test example from selenium javascript
1. Clone this repository
```
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
2. Navigate to `javascript` directory
```
cd seleniumhq.github.io/examples/javascript
```
3. Install dependencies using node
```
npm install
```
4. Run all all tests
```
npm test
```
> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
# Execute a javascript test
Use this command to run a JavaScript and follow the first script example
```
node example_script.spec.js
```大多数 Selenium 用户执行许多会话, 需要组织它们以最大限度地减少重复并维持代码更易于维护. 请继续阅读,了解如何将此代码放入您用例的上下文中 使用 Selenium.
如果你不仅仅只是想执行一小撮的一次性脚本,你需要能组织并编排好你的代码。 本章会启发你如何真正地使用 Selenium 代码做高效的事情。
大部分人使用 Selenium 执行针对 Web 应用的自动化测试,但是 Selenium 其实可以支持任何场景的浏览器自动化。
有时候你需要往网站记录日志或者下载一些东西,或者提交一个表单, 你可以在预设的时间创建一个 Selenium 脚本去执行一个服务。
你是否期望从一个不提供 API 的网站收集数据?Selenium 可以满足你, 但是请确保你了解该网站的服务条例, 因为有些网站不允许你这样做,甚至有些网站会屏蔽 Selenium。
使用 Selenium 做测试需要在 Selenium 执行操作后进行断言,所以一个好的断言类库是很有必要的。 至于组织测试用例结构的一些额外特性则需要Test Runner来完成。
不管你要用 Selenium 来做什么,没有一个好的集成开发环境,你的工作肯定不会高效。以下是一些常见的 IDE 选择:
即使不使用 Selenium 做测试,如果你有高级用例,使用一个 test runner 去更好地组织你的代码是很有意义的。 学会使用 before/after hooks 和分组执行或者并行执行将会非常有用。
有非常多不同的 test runner 可供选择。
这个教程中所有使用到 test runner 的代码示例都可以在我们的示例目录中找到(或者正在被迁移过去), 而且这些示例在每一次发版都会被执行,以确保代码是正确的和最新的。 下面是一份包含对应链接的 test runner 清单,其中第一项是被这个仓库和本页所有用例所使用的。
在安装 Selenium 类库一节中详细说明了需要哪些东西。 这里的代码只展示在我们的文档示例项目中用到的示例。
Maven
Gradle
To use it in a project, add it to the requirements.txt file:
in the project’s csproj file, specify the dependency as a PackageReference in ItemGroup:
Add to project’s gemfile
In your project’s package.json, add requirement to dependencies:
String title = driver.getTitle();
assertEquals("Web form", title);package dev.selenium.getting_started;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.time.Duration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class UsingSeleniumTest {
WebDriver driver;
@BeforeEach
public void setup() {
driver = new ChromeDriver();
}
@Test
public void eightComponents() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
String title = driver.getTitle();
assertEquals("Web form", title);
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
String value = message.getText();
assertEquals("Received!", value);
}
@AfterEach
public final void teardown() {
if (driver != null) {
driver.quit();
}
}
}
title = driver.title
assert title == "Web form"from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components():
driver = setup()
title = driver.title
assert title == "Web form"
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
value = message.text
assert value == "Received!"
teardown(driver)
def setup():
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
return driver
def teardown(driver):
driver.quit()
var title = driver.Title;
Assert.AreEqual("Web form", title);using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted
{
[TestClass]
public class UsingSeleniumTest
{
[TestMethod]
public void EightComponents()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
Assert.AreEqual("Web form", title);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
Assert.AreEqual("Received!", value);
driver.Quit();
}
}
} title = @driver.title
expect(title).to eq('Web form')# frozen_string_literal: true
require 'spec_helper'
require 'selenium-webdriver'
RSpec.describe 'Using Selenium' do
before do
@driver = Selenium::WebDriver.for :chrome
end
it 'uses eight components' do
@driver.get('https://www.selenium.dev/selenium/web/web-form.html')
title = @driver.title
expect(title).to eq('Web form')
@driver.manage.timeouts.implicit_wait = 500
text_box = @driver.find_element(name: 'my-text')
submit_button = @driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = @driver.find_element(id: 'message')
value = message.text
expect(value).to eq('Received!')
end
end
let title = await driver.getTitle();
assert.equal("Web form", title);const {By, Builder} = require('selenium-webdriver');
const assert = require("assert");
describe('First script', function () {
let driver;
before(async function () {
driver = await new Builder().forBrowser('chrome').build();
});
it('First Selenium script with mocha', async function () {
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
});
after(async () => await driver.quit());
}); val title = driver.title
assertEquals("Web form", title)package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
} @BeforeEach
public void setup() {
driver = new ChromeDriver();
}package dev.selenium.getting_started;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.time.Duration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class UsingSeleniumTest {
WebDriver driver;
@BeforeEach
public void setup() {
driver = new ChromeDriver();
}
@Test
public void eightComponents() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
String title = driver.getTitle();
assertEquals("Web form", title);
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
String value = message.getText();
assertEquals("Received!", value);
}
@AfterEach
public final void teardown() {
if (driver != null) {
driver.quit();
}
}
}
@AfterEach
public final void teardown() {
if (driver != null) {
driver.quit();package dev.selenium.getting_started;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.time.Duration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class UsingSeleniumTest {
WebDriver driver;
@BeforeEach
public void setup() {
driver = new ChromeDriver();
}
@Test
public void eightComponents() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
String title = driver.getTitle();
assertEquals("Web form", title);
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
String value = message.getText();
assertEquals("Received!", value);
}
@AfterEach
public final void teardown() {
if (driver != null) {
driver.quit();
}
}
}
def setup():
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
return driverfrom selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components():
driver = setup()
title = driver.title
assert title == "Web form"
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
value = message.text
assert value == "Received!"
teardown(driver)
def setup():
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
return driver
def teardown(driver):
driver.quit()
def teardown(driver):
driver.quit()from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components():
driver = setup()
title = driver.title
assert title == "Web form"
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
value = message.text
assert value == "Received!"
teardown(driver)
def setup():
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
return driver
def teardown(driver):
driver.quit()
before do
@driver = Selenium::WebDriver.for :chrome
end# frozen_string_literal: true
require 'spec_helper'
require 'selenium-webdriver'
RSpec.describe 'Using Selenium' do
before do
@driver = Selenium::WebDriver.for :chrome
end
it 'uses eight components' do
@driver.get('https://www.selenium.dev/selenium/web/web-form.html')
title = @driver.title
expect(title).to eq('Web form')
@driver.manage.timeouts.implicit_wait = 500
text_box = @driver.find_element(name: 'my-text')
submit_button = @driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = @driver.find_element(id: 'message')
value = message.text
expect(value).to eq('Received!')
end
end
config.after { @driver&.quit }# frozen_string_literal: true
require 'selenium-webdriver'
require 'selenium/webdriver/support/guards'
RSpec.configure do |config|
# Enable flags like --only-failures and --next-failure
config.example_status_persistence_file_path = '.rspec_status'
# Disable RSpec exposing methods globally on `Module` and `main`
config.disable_monkey_patching!
Dir.mktmpdir('tmp')
config.example_status_persistence_file_path = 'tmp/examples.txt'
config.expect_with :rspec do |c|
c.syntax = :expect
end
config.before do |example|
bug_tracker = 'https://github.com/SeleniumHQ/seleniumhq.github.io/issues'
guards = Selenium::WebDriver::Support::Guards.new(example,
bug_tracker: bug_tracker)
guards.add_condition(:platform, Selenium::WebDriver::Platform.os)
guards.add_condition(:ci, Selenium::WebDriver::Platform.ci)
results = guards.disposition
send(*results) if results
end
config.after { @driver&.quit }
def start_session
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('disable-search-engine-choice-screen')
options.add_argument('--no-sandbox')
@driver = Selenium::WebDriver.for(:chrome, options: options)
end
def start_bidi_session
options = Selenium::WebDriver::Chrome::Options.new(web_socket_url: true)
@driver = Selenium::WebDriver.for :chrome, options: options
end
def start_firefox
options = Selenium::WebDriver::Options.firefox(timeouts: {implicit: 1500})
@driver = Selenium::WebDriver.for :firefox, options: options
end
end
before(async function () {
driver = await new Builder().forBrowser('chrome').build();
});const {By, Builder} = require('selenium-webdriver');
const assert = require("assert");
describe('First script', function () {
let driver;
before(async function () {
driver = await new Builder().forBrowser('chrome').build();
});
it('First Selenium script with mocha', async function () {
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
});
after(async () => await driver.quit());
}); after(async () => await driver.quit());const {By, Builder} = require('selenium-webdriver');
const assert = require("assert");
describe('First script', function () {
let driver;
before(async function () {
driver = await new Builder().forBrowser('chrome').build();
});
it('First Selenium script with mocha', async function () {
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
});
after(async () => await driver.quit());
});mvn clean test
gradle clean test
pytest# Running tests from Selenium Python examples
#### 1. Clone this repository
```
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
#### 2. Navigate to `python` directory
```
cd seleniumhq.github.io/examples/python
```
#### 3. Create a virtual environment
- On Windows:
```
py -m venv venv
venv\Scripts\activate
```
- On Linux/Mac:
```
python3 -m venv venv
source venv/bin/activate
```
#### 4. Install dependencies:
```
pip install -r requirements.txt
```
> for help, see: https://packaging.python.org/en/latest/tutorials/installing-packages
#### 5. Run tests
- Run all tests with the default Python interpreter:
```
pytest
```
- Run all tests with every installed/supported Python interpreter:
```
tox
```
> Please have some patience - If you are doing it for the first time, it will take a little while to download the browser drivers
- Run a specific example:
```
pytest path/to/test_script.py
```
> Make sure to replace `path/to/test_script.py` with the path and name of the example you want to run
dotnet test# Running Selenium .NET (C#) Tests
The following steps will guide you on how to
run Selenium .NET (C#) tests using the examples
from the `SeleniumHQ/seleniumhq.github.io` repository.
## Initial Setup
### Prerequisites
Ensure you have the following installed:
- [.NET SDK (8.0 or later)](https://dotnet.microsoft.com/en-us/download)
- An IDE like [Visual Studio](https://visualstudio.microsoft.com/) or [Visual Studio Code](https://code.visualstudio.com/)
- [.NET CLI tools](https://learn.microsoft.com/en-us/dotnet/core/tools/)
### Clone the repository
Clone the Selenium documentation repository to your local machine:
```bash
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
## Navigate to the .NET directory
### Change into the .NET examples directory:
```bash
cd seleniumhq.github.io/examples/dotnet/SeleniumDocs
```
## Running the Tests
### Restore dependencies
Install necessary dependencies using the .NET CLI:
```bash
dotnet restore
```
### Run all tests
To run all available tests:
```bash
dotnet test
```
### Run a Specific Test Method
To run a specific test method using its fully qualified name:
```bash
dotnet test --filter "FullyQualifiedName=Namespace.ClassName.MethodName"
```
For example:
```bash
dotnet test --filter "FullyQualifiedName=SeleniumDocs.GettingStarted.UsingSeleniumTest.EightComponents"
```
You can also filter by test name only (if it's unique):
```bash
dotnet test --filter "Name=EightComponents"
```bundle exec rspec# Running all tests from Selenium ruby example
Follow these steps to run all test example from selenium ruby
1. Clone this repository
```
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
2. Navigate to `ruby` directory
```
cd seleniumhq.github.io/examples/ruby
```
3. Install dependencies using bundler
```
bundler install
```
4. Run all tests
```
bundle exec rspec
```
> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
# Execute a ruby script
Use this command to run a ruby script and follow the first script example
```
ruby example_script.rb
```mocha runningTests.spec.js
npx mocha runningTests.spec.js
在第一个脚本一节中,我们了解了 Selenium 脚本的每一个组件。 这里是使用 test runner 重新组织那个脚本的一个示例:
package dev.selenium.getting_started;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.time.Duration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class UsingSeleniumTest {
WebDriver driver;
@BeforeEach
public void setup() {
driver = new ChromeDriver();
}
@Test
public void eightComponents() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
String title = driver.getTitle();
assertEquals("Web form", title);
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
String value = message.getText();
assertEquals("Received!", value);
}
@AfterEach
public final void teardown() {
if (driver != null) {
driver.quit();
}
}
}
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components():
driver = setup()
title = driver.title
assert title == "Web form"
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
value = message.text
assert value == "Received!"
teardown(driver)
def setup():
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
return driver
def teardown(driver):
driver.quit()
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted
{
[TestClass]
public class UsingSeleniumTest
{
[TestMethod]
public void EightComponents()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
Assert.AreEqual("Web form", title);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
Assert.AreEqual("Received!", value);
driver.Quit();
}
}
}# frozen_string_literal: true
require 'spec_helper'
require 'selenium-webdriver'
RSpec.describe 'Using Selenium' do
before do
@driver = Selenium::WebDriver.for :chrome
end
it 'uses eight components' do
@driver.get('https://www.selenium.dev/selenium/web/web-form.html')
title = @driver.title
expect(title).to eq('Web form')
@driver.manage.timeouts.implicit_wait = 500
text_box = @driver.find_element(name: 'my-text')
submit_button = @driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = @driver.find_element(id: 'message')
value = message.text
expect(value).to eq('Received!')
end
end
const {By, Builder} = require('selenium-webdriver');
const assert = require("assert");
describe('First script', function () {
let driver;
before(async function () {
driver = await new Builder().forBrowser('chrome').build();
});
it('First Selenium script with mocha', async function () {
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
});
after(async () => await driver.quit());
});使用你目前所学到的知识构建你自己的 Selenium 代码吧!
想要了解更多的功能特性, 请继续阅读我们接下来的WebDriver 教程
启动和停止会话, 用于打开和关闭浏览器.
创建会话对应于W3C的命令 新建会话
会话是通过初始化新的驱动类对象自动创建的.
每种语言都允许使用来自这些类 (或等效类) 之一的参数创建会话:
启动本地驱动的首要唯一参数 包括在本地计算机上有关启动所需驱动服务的信息.
WebDriver driver = new ChromeDriver(chromeOptions);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
driver = new ChromeDriver(options);using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs
{
public class BaseTest
{
protected IWebDriver driver;
protected Uri GridUrl;
private Process _webserverProcess;
private const string ServerJarName = "selenium-server-4.46.0.jar";
private static readonly string BaseDirectory = AppContext.BaseDirectory;
private const string RelativePathToGrid = "../../../../../";
private readonly string _examplesDirectory = Path.GetFullPath(Path.Combine(BaseDirectory, RelativePathToGrid));
[TestCleanup]
public void Cleanup()
{
driver?.Quit();
if (_webserverProcess != null)
{
StopServer();
}
}
protected void StartDriver(string browserVersion = null)
{
ChromeOptions options = new ChromeOptions();
if (browserVersion != null)
{
options.BrowserVersion = browserVersion;
string userDataDir = System.IO.Path.Combine(System.IO.Path.GetTempPath(), System.IO.Path.GetRandomFileName());
System.IO.Directory.CreateDirectory(userDataDir);
options.AddArgument($"--user-data-dir={userDataDir}");
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage");
}
driver = new ChromeDriver(options);
}
protected async Task StartServer()
{
if (_webserverProcess == null || _webserverProcess.HasExited)
{
_webserverProcess = new Process();
_webserverProcess.StartInfo.FileName =
RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "java.exe" : "java";
string port = GetFreeTcpPort().ToString();
GridUrl = new Uri("http://localhost:" + port + "/wd/hub");
_webserverProcess.StartInfo.Arguments = " -jar " + ServerJarName +
" standalone --port " + port +
" --selenium-manager true --enable-managed-downloads true";
_webserverProcess.StartInfo.WorkingDirectory = _examplesDirectory;
_webserverProcess.Start();
await EnsureGridIsRunningAsync();
}
}
private void StopServer()
{
if (_webserverProcess != null && !_webserverProcess.HasExited)
{
_webserverProcess.Kill();
_webserverProcess.Dispose();
_webserverProcess = null;
}
}
private static int GetFreeTcpPort()
{
TcpListener l = new TcpListener(IPAddress.Loopback, 0);
l.Start();
int port = ((IPEndPoint)l.LocalEndpoint).Port;
l.Stop();
return port;
}
private async Task EnsureGridIsRunningAsync()
{
DateTime timeout = DateTime.Now.Add(TimeSpan.FromSeconds(240));
bool isRunning = false;
HttpClient client = new HttpClient();
while (!isRunning && DateTime.Now < timeout)
{
try
{
HttpResponseMessage response = await client.GetAsync(GridUrl + "/status");
if (response.IsSuccessStatusCode)
{
isRunning = true;
}
else
{
await Task.Delay(1000);
}
}
catch (HttpRequestException)
{
await Task.Delay(1000);
}
}
if (!isRunning)
{
throw new TimeoutException("Could not confirm the remote selenium server is running within 30 seconds");
}
}
}
}
driver = Selenium::WebDriver.for :chrome, options: options# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options)
.setChromeService(service)
.build();const fs = require('fs');
const os = require('os');
const path = require('path');
const Chrome = require('selenium-webdriver/chrome');
const {Browser, Builder} = require("selenium-webdriver");
const {getBinaryPaths} = require("selenium-webdriver/common/driverFinder");
describe('Service Test', function () {
let driver;
let userDataDir;
let service;
let options;
afterEach(async function () {
if (driver) {
await driver.quit();
driver = null;
}
if (userDataDir) {
fs.rmSync(userDataDir, { recursive: true, force: true });
userDataDir = null;
}
});
it('Default service', async function () {
service = new Chrome.ServiceBuilder();
driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeService(service)
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
});
it('Set Driver Location', async function () {
options = new Chrome.Options();
options.setBrowserVersion("stable");
let paths = getBinaryPaths(options);
let driverPath = paths.driverPath;
let browserPath = paths.browserPath;
options.setChromeBinaryPath(browserPath);
userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'chrome-profile-'));
options.addArguments(`--user-data-dir=${userDataDir}`);
options.addArguments('--no-sandbox');
options.addArguments('--disable-dev-shm-usage');
service = new Chrome.ServiceBuilder(driverPath);
driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options)
.setChromeService(service)
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
});
it('Set port', async function () {
service = new Chrome.ServiceBuilder().setPort(1234);
driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeService(service)
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
});
});
用于启动远程驱动的首要唯一参数包括有关在何处执行代码的信息. 请浏览 远程驱动章节中的详细信息
退出会话对应于W3C的命令 删除会话.
重要提示: quit 方法与 close 方法不同,
建议始终使用 quit 来结束会话
driver.quit();package dev.selenium.getting_started;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.time.Duration;
public class FirstScript {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
message.getText();
driver.quit();
}
}
driver.quit()from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
driver.Quit();using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted;
public static class FirstScript
{
public static void Main()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");
var title = driver.Title;
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
driver.Quit();
}
} driver.quit# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
await driver.quit();const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");
(async function firstTest() {
let driver;
try {
driver = await new Builder().forBrowser(Browser.CHROME).build();
await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
} catch (e) {
console.log(e)
} finally {
await driver.quit();
}
}())
driver.quit()package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
val title = driver.title
assertEquals("Web form", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
textBox.sendKeys("Selenium")
submitButton.click()
val message = driver.findElement(By.id("message"))
val value = message.getText()
assertEquals("Received!", value)
driver.quit()
}
}在 Selenium 3 中, capabilities是借助"Desired Capabilities"类定义于会话中的. 从 Selenium 4 开始, 您必须使用浏览器选项类. 对于远程驱动程序会话, 浏览器选项实例是必需的, 因为它确定将使用哪个浏览器.
这些选项在 Capabilities 的 w3c 规范中进行了描述.
每个浏览器都有 自定义选项 , 是规范定义之外的内容.
默认情况下,使用 Options 类实例时会设置浏览器名称.
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.chrome# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
此功能是可选的,用于在远程端设置可用的浏览器版本. 在最新版本的 Selenium 中,如果在系统上找不到该版本, 它将被 Selenium Manager 自动下载
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options.browser_version = 'latest'# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
共有三种类型的页面加载策略.
页面加载策略可以在此链接查询 document.readyState , 如下表所述:
| 策略 | 就绪状态 | 备注 |
|---|---|---|
| normal | complete | 默认值, 等待所有资源下载 |
| eager | interactive | DOM 访问已准备就绪, 但诸如图像的其他资源可能仍在加载 |
| none | Any | 完全不会阻塞 WebDriver |
文档的 document.readyState 属性描述当前文档的加载状态.
当通过URL导航到新页面时, 默认情况下, WebDriver将暂缓完成导航方法 (例如, driver.navigate().get())直到文档就绪状态完成. 这 并非意味着该页面已完成加载, 特别是对于使用 JavaScript 在就绪状态返回完成后 动态加载内容单页应用程序的站点. 另请注意此行为不适用于单击元素或提交表单后出现的导航行为.
如果由于下载对自动化不重要的资源(例如, 图像、css、js)
而需要很长时间才能加载页面,
您可以将默认参数normal更改为
eager 或 none 以加快会话加载速度.
此值适用于整个会话,
因此请确保您的 等待策略
足够普适.
WebDriver一直等到 load 事件触发并返回.
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class OptionsTest : BaseTest
{
[TestMethod]
public void SetPageLoadStrategyNormal()
{
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
// Navigate to Url
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
[TestMethod]
public void SetPageLoadStrategyEager()
{
var chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
[TestMethod]
public void SetPageLoadStrategyNone()
{
var chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
}
} options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('normal'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();const Chrome = require('selenium-webdriver/chrome');
const {Browser, Builder} = require("selenium-webdriver");
const options = new Chrome.Options()
describe('Page loading strategies', function () {
it('Navigate using eager page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('eager'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using none page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('none'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using normal page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('normal'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Should be able to accept certs', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setAcceptInsecureCerts(true))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
});import org.openqa.selenium.PageLoadStrategy
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
fun main() {
val chromeOptions = ChromeOptions()
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL)
val driver = ChromeDriver(chromeOptions)
try {
driver.get("https://www.google.com")
}
finally {
driver.quit()
}
}WebDriver一直等到 DOMContentLoaded 事件触发并返回.
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
var chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class OptionsTest : BaseTest
{
[TestMethod]
public void SetPageLoadStrategyNormal()
{
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
// Navigate to Url
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
[TestMethod]
public void SetPageLoadStrategyEager()
{
var chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
[TestMethod]
public void SetPageLoadStrategyNone()
{
var chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
}
} options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('eager'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();const Chrome = require('selenium-webdriver/chrome');
const {Browser, Builder} = require("selenium-webdriver");
const options = new Chrome.Options()
describe('Page loading strategies', function () {
it('Navigate using eager page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('eager'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using none page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('none'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using normal page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('normal'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Should be able to accept certs', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setAcceptInsecureCerts(true))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
});import org.openqa.selenium.PageLoadStrategy
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
fun main() {
val chromeOptions = ChromeOptions()
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER)
val driver = ChromeDriver(chromeOptions)
try {
driver.get("https://www.google.com")
}
finally {
driver.quit()
}
}WebDriver 仅等待初始页面已下载.
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
[TestMethod]
public void SetPageLoadStrategyNone()using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class OptionsTest : BaseTest
{
[TestMethod]
public void SetPageLoadStrategyNormal()
{
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
// Navigate to Url
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
[TestMethod]
public void SetPageLoadStrategyEager()
{
var chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
[TestMethod]
public void SetPageLoadStrategyNone()
{
var chromeOptions = new ChromeOptions();
chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
IWebDriver driver = new ChromeDriver(chromeOptions);
try
{
driver.Navigate().GoToUrl("https://selenium.dev");
}
finally
{
driver.Quit();
}
}
}
} options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('none'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();const Chrome = require('selenium-webdriver/chrome');
const {Browser, Builder} = require("selenium-webdriver");
const options = new Chrome.Options()
describe('Page loading strategies', function () {
it('Navigate using eager page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('eager'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using none page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('none'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using normal page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('normal'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Should be able to accept certs', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setAcceptInsecureCerts(true))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
});import org.openqa.selenium.PageLoadStrategy
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
fun main() {
val chromeOptions = ChromeOptions()
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE)
val driver = ChromeDriver(chromeOptions)
try {
driver.get("https://www.google.com")
}
finally {
driver.quit()
}
}这标识了远端的操作系统,
获取 platformName 将返回操作系统的名称.
在基于云的供应者中,
设置 platformName 将在远程端设置操作系统.
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
此功能检查在会话期间导航时
是否使用了过期的 (或) 无效的 TLS Certificate .
如果将功能设置为 false,
则页面浏览遇到任何域证书问题时,
将返回insecure certificate error .
如果设置为 true, 则浏览器将信任无效证书.
默认情况下, 此功能将信任所有自签名证书.
设置后, acceptInsecureCerts 功能将在整个会话中生效.
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setAcceptInsecureCerts(true))
.build();const Chrome = require('selenium-webdriver/chrome');
const {Browser, Builder} = require("selenium-webdriver");
const options = new Chrome.Options()
describe('Page loading strategies', function () {
it('Navigate using eager page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('eager'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using none page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('none'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Navigate using normal page loading strategy', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setPageLoadStrategy('normal'))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
it('Should be able to accept certs', async function () {
let driver = new Builder()
.forBrowser(Browser.CHROME)
.setChromeOptions(options.setAcceptInsecureCerts(true))
.build();
await driver.get('https://www.selenium.dev/selenium/web/blank.html');
await driver.quit();
});
});WebDriver session 具有一定的 session timeout 间隔,
在此间隔内, 用户可以控制执行脚本或从浏览器检索信息的行为.
每个会话超时都配置有不同 timeouts 的组合,
如下所述:
指定在当前浏览上下文中, 中断正在执行脚本的时机. WebDriver创建新会话时, 将设置默认的超时时间为 30,000 .
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
指定在当前浏览上下文中, 加载网页的时间间隔. WebDriver创建新会话时, 默认设置超时时间为 300,000 . 如果页面加载限制了给定 (或默认) 的时间范围, 则该脚本将被 TimeoutException 停止.
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
指定在定位元素时, 等待隐式元素定位策略的时间. WebDriver创建新会话时, 将设置默认超时时间为 0 .
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
指定当前会话 user prompt handler 的状态.
默认为 dismiss and notify state .
这定义了在远端出现用户提示时必须采取的措施.
该行为由unhandledPromptBehavior 功能定义,
具有以下状态:
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
新功能用于是否对 类型为文件的输入(input type=file) 元素进行严格的交互性检查. 默认关闭严格性检查, 在将 元素的Send Keys 方法作用于隐藏的文件上传时, 会有控制方面的行为区别.
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.UnexpectedAlertBehaviour;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.chrome.ChromeDriver;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyEager() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadStrategyNone() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void setAcceptInsecureCerts() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://selenium.dev");
} finally {
driver.quit();
}
}
@Test
public void getBrowserName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String name = chromeOptions.getBrowserName();
Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
}
@Test
public void setBrowserVersion() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String version = "latest";
chromeOptions.setBrowserVersion(version);
Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
}
@Test
public void setPlatformName() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
String platform = "OS X 10.6";
chromeOptions.setPlatformName(platform);
Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
}
@Test
public void setScriptTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setScriptTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getScriptTimeout();
Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setPageLoadTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setPageLoadTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setImplicitWaitTimeout() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
Duration duration = Duration.of(5, ChronoUnit.SECONDS);
chromeOptions.setImplicitWaitTimeout(duration);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
} finally {
driver.quit();
}
}
@Test
public void setUnhandledPromptBehaviour() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
}
@Test
public void setWindowRect() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
}
@Test
public void setStrictFileInteractability() {
ChromeOptions chromeOptions = getDefaultChromeOptions();
chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
//verify the capability object is not null
Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
Boolean capability = (Boolean) capabilityObject;
Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
}
}
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
代理服务器充当客户端和服务器之间的请求中介. 简述而言, 流量将通过代理服务器流向您请求的地址, 然后返回.
使用代理服务器用于Selenium的自动化脚本, 可能对以下方面有益:
如果您在公司环境中, 并且浏览器无法连接到URL, 则最有可能是因为环境, 需要借助代理进行访问.
Selenium WebDriver提供了如下设置代理的方法
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class ProxyTest {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.setHttpProxy("<HOST:PORT>");
ChromeOptions options = new ChromeOptions();
options.setCapability("proxy", proxy);
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.google.com/");
driver.manage().window().maximize();
driver.quit();
}
}
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
def test_page_load_strategy_normal():
options = get_default_chrome_options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_eager():
options = get_default_chrome_options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_page_load_strategy_none():
options = get_default_chrome_options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_script():
options = get_default_chrome_options()
options.timeouts = { 'script': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_page_load():
options = get_default_chrome_options()
options.timeouts = { 'pageLoad': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_timeouts_implicit_wait():
options = get_default_chrome_options()
options.timeouts = { 'implicit': 5000 }
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_unhandled_prompt():
options = get_default_chrome_options()
options.unhandled_prompt_behavior = 'accept'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_window_rect():
options = webdriver.FirefoxOptions()
options.set_window_rect = True # Full support in Firefox
driver = webdriver.Firefox(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_strict_file_interactability():
options = get_default_chrome_options()
options.strict_file_interactability = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_proxy():
options = get_default_chrome_options()
options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_name():
options = get_default_chrome_options()
assert options.capabilities['browserName'] == 'chrome'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_set_browser_version():
options = get_default_chrome_options()
options.browser_version = 'stable'
assert options.capabilities['browserVersion'] == 'stable'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_platform_name():
options = get_default_chrome_options()
options.platform_name = 'any'
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def test_accept_insecure_certs():
options = get_default_chrome_options()
options.accept_insecure_certs = True
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/")
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
public class ProxyTest{
public static void Main() {
ChromeOptions options = new ChromeOptions();
Proxy proxy = new Proxy();
proxy.Kind = ProxyKind.Manual;
proxy.IsAutoDetect = false;
proxy.SslProxy = "<HOST:PORT>";
options.Proxy = proxy;
options.AddArgument("ignore-certificate-errors");
IWebDriver driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://www.selenium.dev/");
}
}
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Chrome' do
describe 'Driver Options' do
let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'page load strategy normal' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :normal
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy eager' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :eager
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'page load strategy none' do
options = Selenium::WebDriver::Options.chrome
options.page_load_strategy = :none
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets remote capabilities', skip: 'this is example code that will not execute' do
options = Selenium::WebDriver::Options.firefox
options.platform_name = 'Windows 10'
options.browser_version = 'latest'
cloud_options = {}
cloud_options[:build] = my_test_build
cloud_options[:name] = my_test_name
options.add_option('cloud:options', cloud_options)
driver = Selenium::WebDriver.for :remote, capabilities: options
driver.get(url)
driver.quit
end
it 'accepts untrusted certificates' do
options = Selenium::WebDriver::Options.chrome
options.accept_insecure_certs = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets unhandled prompt behavior' do
options = Selenium::WebDriver::Options.chrome
options.unhandled_prompt_behavior = :accept
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets window rect' do
options = Selenium::WebDriver::Options.firefox
options.set_window_rect = true
driver = Selenium::WebDriver.for :firefox, options: options
driver.get(url)
driver.quit
end
it 'sets strict file interactability' do
options = Selenium::WebDriver::Options.chrome
options.strict_file_interactability = true
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the proxy' do
options = Selenium::WebDriver::Options.chrome
options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the implicit timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {implicit: 1}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the page load timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {page_load: 400_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets the script timeout' do
options = Selenium::WebDriver::Options.chrome
options.timeouts = {script: 40_000}
driver = Selenium::WebDriver.for :chrome, options: options
driver.get(url)
driver.quit
end
it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps[:platform] = 'Windows 10'
caps[:version] = '92'
caps[:build] = my_test_build
caps[:name] = my_test_name
driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
driver.get(url)
driver.quit
end
end
end
let webdriver = require('selenium-webdriver');
let chrome = require('selenium-webdriver/chrome');
let proxy = require('selenium-webdriver/proxy');
let opts = new chrome.Options();
(async function example() {
opts.setProxy(proxy.manual({http: '<HOST:PORT>'}));
let driver = new webdriver.Builder()
.forBrowser('chrome')
.setChromeOptions(opts)
.build();
try {
await driver.get("https://selenium.dev");
}
finally {
await driver.quit();
}
}());
import org.openqa.selenium.Proxy
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
class proxyTest {
fun main() {
val proxy = Proxy()
proxy.setHttpProxy("<HOST:PORT>")
val options = ChromeOptions()
options.setCapability("proxy", proxy)
val driver: WebDriver = ChromeDriver(options)
driver["https://www.google.com/"]
driver.manage().window().maximize()
driver.quit()
}
}
允许您为HTTP库设置各种参数.
package dev.selenium.drivers;
import dev.selenium.BaseTest;
import org.openqa.selenium.remote.http.ClientConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
import java.io.FileInputStream;
import java.net.URL;
import java.nio.file.Path;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.time.Duration;
import org.openqa.selenium.UsernameAndPassword;
import static java.net.http.HttpClient.Version.HTTP_1_1;
public class HttpClientTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGridAdvanced();
}
@Test
public void remoteWebDriverWithClientConfig() throws Exception {
ClientConfig clientConfig = ClientConfig.defaultConfig()
.withRetries()
.sslContext(createSSLContextWithCA(Path.of("src/test/resources/tls.crt").toAbsolutePath().toString()))
.connectionTimeout(Duration.ofSeconds(300))
.readTimeout(Duration.ofSeconds(3600))
.authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"))
.version(HTTP_1_1.toString());
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = RemoteWebDriver.builder()
.oneOf(options)
.address(gridUrl)
.config(clientConfig)
.build();
}
@Test
public void remoteWebDriverIgnoreSSL() throws Exception {
ClientConfig clientConfig = ClientConfig.defaultConfig()
.withRetries()
.sslContext(createIgnoreSSLContext())
.connectionTimeout(Duration.ofSeconds(300))
.readTimeout(Duration.ofSeconds(3600))
.authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"))
.version(HTTP_1_1.toString());
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = RemoteWebDriver.builder()
.oneOf(options)
.address(gridUrl)
.config(clientConfig)
.build();
}
@Test
public void remoteWebDriverWithEmbedAuthUrl() throws Exception {
ClientConfig clientConfig = ClientConfig.defaultConfig()
.withRetries()
.sslContext(createSSLContextWithCA(Path.of("src/test/resources/tls.crt").toAbsolutePath().toString()))
.connectionTimeout(Duration.ofSeconds(300))
.readTimeout(Duration.ofSeconds(3600))
.version(HTTP_1_1.toString());
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = RemoteWebDriver.builder()
.oneOf(options)
.address(embedAuthToUrl(gridUrl, "admin", "myStrongPassword"))
.config(clientConfig)
.build();
}
private URL embedAuthToUrl(URL url, String username, String password) throws Exception {
String userInfo = username + ":" + password;
String urlWithAuth = url.getProtocol() + "://" + userInfo + "@" + url.getHost() + ":" + url.getPort() + url.getPath();
return new URL(urlWithAuth);
}
public static SSLContext createSSLContextWithCA(String caCertPath) throws Exception {
FileInputStream fis = new FileInputStream(caCertPath);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate caCert = (X509Certificate) cf.generateCertificate(fis);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry("caCert", caCert);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
return sslContext;
}
public static SSLContext createIgnoreSSLContext() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
return sslContext;
}
}
import os
import pytest
import sys
from urllib3.util import Retry, Timeout
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
from selenium.webdriver.remote.client_config import ClientConfig
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote_with_client_config(grid_server):
proxy = Proxy({"proxyType": ProxyType.AUTODETECT})
retries = Retry(connect=2, read=2, redirect=2)
timeout = Timeout(connect=300, read=3600)
client_config = ClientConfig(remote_server_addr=grid_server,
proxy=proxy,
init_args_for_pool_manager={
"init_args_for_pool_manager": {"retries": retries, "timeout": timeout}},
ca_certs=_get_resource_path("tls.crt"),
username="admin", password="myStrongPassword")
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_server, options=options, client_config=client_config)
driver.get("https://www.selenium.dev")
driver.quit()
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote_ignore_certs(grid_server):
proxy = Proxy({"proxyType": ProxyType.AUTODETECT})
client_config = ClientConfig(remote_server_addr=grid_server,
proxy=proxy,
timeout=3600,
ignore_certificates=True,
username="admin", password="myStrongPassword")
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_server, options=options, client_config=client_config)
driver.get("https://www.selenium.dev")
driver.quit()
def _get_resource_path(file_name: str):
if os.path.abspath("").endswith("tests"):
path = os.path.abspath(f"resources/{file_name}")
else:
path = os.path.abspath(f"tests/resources/{file_name}")
return path
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
it 'sets client configuration' do# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'HTTP Client' do
let(:url) { 'https://www.selenium.dev/selenium/web/' }
it 'sets client configuration' do
client = Selenium::WebDriver::Remote::Http::Default.new(open_timeout: 30, read_timeout: 30)
expect(client.open_timeout).to eq 30
end
it 'uses the custom http client' do
client = Selenium::WebDriver::Remote::Http::Default.new
driver = Selenium::WebDriver.for :chrome, http_client: client
driver.get(url)
driver.quit
end
end
服务类用于管理驱动程序的启动和停止. 它们不能与远程 WebDriver 会话一起使用.
服务类允许您指定有关驱动程序的信息, 诸如位置和要使用的端口. 它们还允许您指定传递哪些参数到命令行. 大多数有用的参数都与日志记录有关.
使用默认服务实例启动驱动程序:
ChromeDriverService service = new ChromeDriverService.Builder().build();
driver = new ChromeDriver(service);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.service.DriverFinder;
public class ServiceTest extends BaseTest {
@Test
public void defaultService() {
ChromeDriverService service = new ChromeDriverService.Builder().build();
driver = new ChromeDriver(service);
}
@Test
public void setDriverLocation() {
setBinaryPaths();
ChromeOptions options = getDefaultChromeOptions();
options.setBinary(browserPath);
ChromeDriverService service =
new ChromeDriverService.Builder().usingDriverExecutable(driverPath).build();
driver = new ChromeDriver(service, options);
}
@Test
public void setPort() {
ChromeDriverService service = new ChromeDriverService.Builder().usingPort(1234).build();
driver = new ChromeDriver(service);
}
private void setBinaryPaths() {
ChromeOptions options = getDefaultChromeOptions();
options.setBrowserVersion("stable");
DriverFinder finder = new DriverFinder(ChromeDriverService.createDefaultService(), options);
driverPath = new File(finder.getDriverPath());
browserPath = new File(finder.getBrowserPath());
}
}
service = webdriver.ChromeService()
driver = webdriver.Chrome(service=service)from selenium import webdriver
def test_basic_service():
service = webdriver.ChromeService()
driver = webdriver.Chrome(service=service)
driver.quit()
def test_driver_location(chromedriver_bin, chrome_bin):
options = get_default_chrome_options()
options.binary_location = chrome_bin
service = webdriver.ChromeService(executable_path=chromedriver_bin)
driver = webdriver.Chrome(service=service, options=options)
driver.quit()
def test_driver_port():
service = webdriver.ChromeService(port=1234)
driver = webdriver.Chrome(service=service)
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
var service = ChromeDriverService.CreateDefaultService();
driver = new ChromeDriver(service);using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using SeleniumDocs.TestSupport;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class ServiceTest : BaseTest
{
[TestMethod]
public void BasicService()
{
var service = ChromeDriverService.CreateDefaultService();
driver = new ChromeDriver(service);
}
[TestMethodCustom]
[EnabledOnOs("OSX")]
public void DriverLocation()
{
var options = GetLatestChromeOptions();
var service = ChromeDriverService.CreateDefaultService(GetDriverLocation(options));
driver = new ChromeDriver(service, options);
}
[TestMethod]
public void DriverPort()
{
var service = ChromeDriverService.CreateDefaultService();
service.Port = 1234;
driver = new ChromeDriver(service);
}
private static string GetDriverLocation(ChromeOptions options)
{
return new DriverFinder(options).GetDriverPathAsync().AsTask().GetAwaiter().GetResult();
}
private static ChromeOptions GetLatestChromeOptions()
{
return new ChromeOptions
{
BrowserVersion = "stable"
};
}
}
} service = Selenium::WebDriver::Service.chrome
@driver = Selenium::WebDriver.for :chrome, service: service# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Service' do
let(:file_name) { File.expand_path('driver.log') }
let(:driver_path) { ENV.fetch('CHROMEDRIVER_BIN', nil) }
let(:browser_path) { ENV.fetch('CHROME_BIN', nil) }
before { driver_finder }
after { FileUtils.rm_f(file_name) }
it 'has default service' do
service = Selenium::WebDriver::Service.chrome
@driver = Selenium::WebDriver.for :chrome, service: service
end
it 'specifies driver location' do
user_data_dir = Dir.mktmpdir('chrome-profile-')
options = Selenium::WebDriver::Options.chrome(binary: browser_path)
options.add_argument("--user-data-dir=#{user_data_dir}")
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
service = Selenium::WebDriver::Service.chrome
service.executable_path = driver_path
@driver = Selenium::WebDriver.for :chrome, service: service, options: options
end
it 'specifies driver port' do
service = Selenium::WebDriver::Service.chrome
service.port = 1234
@driver = Selenium::WebDriver.for :chrome, service: service
end
def driver_finder
options = Selenium::WebDriver::Options.chrome(browser_version: 'stable')
service = Selenium::WebDriver::Service.chrome
finder = Selenium::WebDriver::DriverFinder.new(options, service)
ENV['CHROMEDRIVER_BIN'] = finder.driver_path
ENV['CHROME_BIN'] = finder.browser_path
end
end
注意: 如果您使用的是 Selenium 4.6 或更高版本, 则无需设置驱动程序位置. 如果您无法更新 Selenium 或有高阶用法需求, 以下是指定驱动程序位置的方法:
ChromeDriverService service =
new ChromeDriverService.Builder().usingDriverExecutable(driverPath).build();package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.service.DriverFinder;
public class ServiceTest extends BaseTest {
@Test
public void defaultService() {
ChromeDriverService service = new ChromeDriverService.Builder().build();
driver = new ChromeDriver(service);
}
@Test
public void setDriverLocation() {
setBinaryPaths();
ChromeOptions options = getDefaultChromeOptions();
options.setBinary(browserPath);
ChromeDriverService service =
new ChromeDriverService.Builder().usingDriverExecutable(driverPath).build();
driver = new ChromeDriver(service, options);
}
@Test
public void setPort() {
ChromeDriverService service = new ChromeDriverService.Builder().usingPort(1234).build();
driver = new ChromeDriver(service);
}
private void setBinaryPaths() {
ChromeOptions options = getDefaultChromeOptions();
options.setBrowserVersion("stable");
DriverFinder finder = new DriverFinder(ChromeDriverService.createDefaultService(), options);
driverPath = new File(finder.getDriverPath());
browserPath = new File(finder.getBrowserPath());
}
}
service = webdriver.ChromeService(executable_path=chromedriver_bin)from selenium import webdriver
def test_basic_service():
service = webdriver.ChromeService()
driver = webdriver.Chrome(service=service)
driver.quit()
def test_driver_location(chromedriver_bin, chrome_bin):
options = get_default_chrome_options()
options.binary_location = chrome_bin
service = webdriver.ChromeService(executable_path=chromedriver_bin)
driver = webdriver.Chrome(service=service, options=options)
driver.quit()
def test_driver_port():
service = webdriver.ChromeService(port=1234)
driver = webdriver.Chrome(service=service)
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
var service = ChromeDriverService.CreateDefaultService(GetDriverLocation(options));using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using SeleniumDocs.TestSupport;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class ServiceTest : BaseTest
{
[TestMethod]
public void BasicService()
{
var service = ChromeDriverService.CreateDefaultService();
driver = new ChromeDriver(service);
}
[TestMethodCustom]
[EnabledOnOs("OSX")]
public void DriverLocation()
{
var options = GetLatestChromeOptions();
var service = ChromeDriverService.CreateDefaultService(GetDriverLocation(options));
driver = new ChromeDriver(service, options);
}
[TestMethod]
public void DriverPort()
{
var service = ChromeDriverService.CreateDefaultService();
service.Port = 1234;
driver = new ChromeDriver(service);
}
private static string GetDriverLocation(ChromeOptions options)
{
return new DriverFinder(options).GetDriverPathAsync().AsTask().GetAwaiter().GetResult();
}
private static ChromeOptions GetLatestChromeOptions()
{
return new ChromeOptions
{
BrowserVersion = "stable"
};
}
}
} service.executable_path = driver_path# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Service' do
let(:file_name) { File.expand_path('driver.log') }
let(:driver_path) { ENV.fetch('CHROMEDRIVER_BIN', nil) }
let(:browser_path) { ENV.fetch('CHROME_BIN', nil) }
before { driver_finder }
after { FileUtils.rm_f(file_name) }
it 'has default service' do
service = Selenium::WebDriver::Service.chrome
@driver = Selenium::WebDriver.for :chrome, service: service
end
it 'specifies driver location' do
user_data_dir = Dir.mktmpdir('chrome-profile-')
options = Selenium::WebDriver::Options.chrome(binary: browser_path)
options.add_argument("--user-data-dir=#{user_data_dir}")
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
service = Selenium::WebDriver::Service.chrome
service.executable_path = driver_path
@driver = Selenium::WebDriver.for :chrome, service: service, options: options
end
it 'specifies driver port' do
service = Selenium::WebDriver::Service.chrome
service.port = 1234
@driver = Selenium::WebDriver.for :chrome, service: service
end
def driver_finder
options = Selenium::WebDriver::Options.chrome(browser_version: 'stable')
service = Selenium::WebDriver::Service.chrome
finder = Selenium::WebDriver::DriverFinder.new(options, service)
ENV['CHROMEDRIVER_BIN'] = finder.driver_path
ENV['CHROME_BIN'] = finder.browser_path
end
end
如果希望驱动程序在特定端口上运行, 您可以在启动时指定端口号, 如下所示:
ChromeDriverService service = new ChromeDriverService.Builder().usingPort(1234).build();package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.service.DriverFinder;
public class ServiceTest extends BaseTest {
@Test
public void defaultService() {
ChromeDriverService service = new ChromeDriverService.Builder().build();
driver = new ChromeDriver(service);
}
@Test
public void setDriverLocation() {
setBinaryPaths();
ChromeOptions options = getDefaultChromeOptions();
options.setBinary(browserPath);
ChromeDriverService service =
new ChromeDriverService.Builder().usingDriverExecutable(driverPath).build();
driver = new ChromeDriver(service, options);
}
@Test
public void setPort() {
ChromeDriverService service = new ChromeDriverService.Builder().usingPort(1234).build();
driver = new ChromeDriver(service);
}
private void setBinaryPaths() {
ChromeOptions options = getDefaultChromeOptions();
options.setBrowserVersion("stable");
DriverFinder finder = new DriverFinder(ChromeDriverService.createDefaultService(), options);
driverPath = new File(finder.getDriverPath());
browserPath = new File(finder.getBrowserPath());
}
}
service = webdriver.ChromeService(port=1234)from selenium import webdriver
def test_basic_service():
service = webdriver.ChromeService()
driver = webdriver.Chrome(service=service)
driver.quit()
def test_driver_location(chromedriver_bin, chrome_bin):
options = get_default_chrome_options()
options.binary_location = chrome_bin
service = webdriver.ChromeService(executable_path=chromedriver_bin)
driver = webdriver.Chrome(service=service, options=options)
driver.quit()
def test_driver_port():
service = webdriver.ChromeService(port=1234)
driver = webdriver.Chrome(service=service)
driver.quit()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
service.Port = 1234;using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using SeleniumDocs.TestSupport;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class ServiceTest : BaseTest
{
[TestMethod]
public void BasicService()
{
var service = ChromeDriverService.CreateDefaultService();
driver = new ChromeDriver(service);
}
[TestMethodCustom]
[EnabledOnOs("OSX")]
public void DriverLocation()
{
var options = GetLatestChromeOptions();
var service = ChromeDriverService.CreateDefaultService(GetDriverLocation(options));
driver = new ChromeDriver(service, options);
}
[TestMethod]
public void DriverPort()
{
var service = ChromeDriverService.CreateDefaultService();
service.Port = 1234;
driver = new ChromeDriver(service);
}
private static string GetDriverLocation(ChromeOptions options)
{
return new DriverFinder(options).GetDriverPathAsync().AsTask().GetAwaiter().GetResult();
}
private static ChromeOptions GetLatestChromeOptions()
{
return new ChromeOptions
{
BrowserVersion = "stable"
};
}
}
} service.port = 1234# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Service' do
let(:file_name) { File.expand_path('driver.log') }
let(:driver_path) { ENV.fetch('CHROMEDRIVER_BIN', nil) }
let(:browser_path) { ENV.fetch('CHROME_BIN', nil) }
before { driver_finder }
after { FileUtils.rm_f(file_name) }
it 'has default service' do
service = Selenium::WebDriver::Service.chrome
@driver = Selenium::WebDriver.for :chrome, service: service
end
it 'specifies driver location' do
user_data_dir = Dir.mktmpdir('chrome-profile-')
options = Selenium::WebDriver::Options.chrome(binary: browser_path)
options.add_argument("--user-data-dir=#{user_data_dir}")
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
service = Selenium::WebDriver::Service.chrome
service.executable_path = driver_path
@driver = Selenium::WebDriver.for :chrome, service: service, options: options
end
it 'specifies driver port' do
service = Selenium::WebDriver::Service.chrome
service.port = 1234
@driver = Selenium::WebDriver.for :chrome, service: service
end
def driver_finder
options = Selenium::WebDriver::Options.chrome(browser_version: 'stable')
service = Selenium::WebDriver::Service.chrome
finder = Selenium::WebDriver::DriverFinder.new(options, service)
ENV['CHROMEDRIVER_BIN'] = finder.driver_path
ENV['CHROME_BIN'] = finder.browser_path
end
end
日志记录功能因浏览器而异. 大多数浏览器都允许您指定日志的位置和级别. 请查看相应的浏览器页面:
如果远程计算机上正在运行 Selenium Grid, 则 Selenium 允许您自动化远程计算机上的浏览器. 执行代码的计算机称为客户端计算机, 具有浏览器和驱动程序的计算机称为远程计算机, 有时也称为终端节点. 要将 Selenium 测试指向到远程计算机, 您需要使用 Remote WebDriver 类并传递包含该机器上网格端口的URL. 请参阅网格文档, 了解配置网格的全部方式.
驱动程序需要知道在远程计算机上向何处发送命令, 以及启动哪个浏览器. 所以地址和选项实例都是必需的.
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_url, options=options)import os
import sys
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote(grid_url):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_url, options=options)
assert "localhost" in driver.command_executor._client_config.remote_server_addr
driver.quit()
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_uploads(server):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=server, options=options)
driver.get("https://the-internet.herokuapp.com/upload")
upload_file = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "selenium-snapshot.png"))
driver.file_detector = LocalFileDetector()
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(upload_file)
driver.find_element(By.ID, "file-submit").click()
file_name_element = driver.find_element(By.ID, "uploaded-files")
file_name = file_name_element.text
assert file_name == "selenium-snapshot.png"
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_downloads(server, temp_dir):
options = get_default_chrome_options()
options.enable_downloads = True
driver = webdriver.Remote(command_executor=server, options=options)
file_names = ["file_1.txt", "file_2.jpg"]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(By.ID, "file-1").click()
driver.find_element(By.ID, "file-2").click()
WebDriverWait(driver, 3).until(lambda d: "file_2.jpg" in d.get_downloadable_files())
files = driver.get_downloadable_files()
assert sorted(files) == sorted(file_names)
downloadable_file = file_names[0]
target_directory = temp_dir
driver.download_file(downloadable_file, target_directory)
target_file = os.path.join(target_directory, downloadable_file)
with open(target_file, "r") as file:
assert "Hello, World!" in file.read()
driver.delete_downloadable_files()
assert not driver.get_downloadable_files()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup()
{
await StartServer();
}
[TestMethod]
public void RunRemote()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
Assert.IsInstanceOfType(driver, typeof(IHasDownloads));
}
[TestMethod]
public void Uploads()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://the-internet.herokuapp.com/upload";
string baseDirectory = AppContext.BaseDirectory;
string relativePath = "../../../TestSupport/selenium-snapshot.png";
string uploadFile = Path.GetFullPath(Path.Combine(baseDirectory, relativePath));
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();
IWebElement fileName = driver.FindElement(By.Id("uploaded-files"));
Assert.AreEqual("selenium-snapshot.png", fileName.Text);
}
[TestMethod]
public void Downloads()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
driver.FindElement(By.Id("file-1")).Click();
driver.FindElement(By.Id("file-2")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
Assert.IsTrue(names.Contains("file_1.txt"));
Assert.IsTrue(names.Contains("file_2.jpg"));
string downloadableFile = names.First(f => f == "file_1.txt");
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
string fileContent = File.ReadAllText(Path.Combine(targetDirectory, downloadableFile));
Assert.AreEqual("Hello, World!", fileContent.Trim());
((RemoteWebDriver)driver).DeleteDownloadableFiles();
Assert.IsTrue(((RemoteWebDriver)driver).GetDownloadableFiles().IsNullOrEmpty());
Directory.Delete(targetDirectory, recursive: true);
}
[TestMethod]
public void CustomExecutor()
{
driver = new RemoteWebDriver(GridUrl, new FirefoxOptions());
driver.Navigate().GoToUrl("https://www.selenium.dev/");
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);
Screenshot image = new Screenshot((string)screenshotResponse);
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(targetDirectory);
string targetFile = Path.GetFullPath(Path.Combine(targetDirectory, "fullPage.png"));
using (var memoryStream = new MemoryStream(image.AsByteArray))
using (var fileStream = new FileStream(targetFile, FileMode.Create))
{
memoryStream.WriteTo(fileStream);
}
Assert.IsTrue(File.Exists(targetFile));
Directory.Delete(targetDirectory, true);
}
}
} options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec.describe 'Remote WebDriver' do
let(:target_directory) { File.join(Dir.tmpdir, SecureRandom.uuid) }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
let(:server) do
Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.46.0.jar'), __dir__),
background: true,
args: %w[--selenium-manager true --enable-managed-downloads true])
end
let(:grid_url) { server.webdriver_url }
before { server.start }
after { server.stop }
it 'starts remotely' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
expect { driver.session_id }.not_to raise_exception
end
it 'uploads' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: server.webdriver_url, options: options
driver.get('https://the-internet.herokuapp.com/upload')
upload_file = File.expand_path('../spec_support/selenium-snapshot.png', __dir__)
driver.file_detector = ->((filename, *)) { filename.include?('selenium') && filename }
file_input = driver.find_element(css: 'input[type=file]')
file_input.send_keys(upload_file)
driver.find_element(id: 'file-submit').click
wait.until { driver.find_element(id: 'uploaded-files') }
expect(driver.find_element(id: 'uploaded-files').text).to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium::WebDriver::Options.chrome(enable_downloads: true)
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
file_names = %w[file_1.txt file_2.jpg]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(id: 'file-1').click
driver.find_element(id: 'file-2').click
wait.until { driver.downloadable_files.include?('file_2.jpg') && driver.downloadable_files.include?('file_1.txt') }
files = driver.downloadable_files
expect(files.sort).to eq file_names.sort
downloadable_file = 'file_1.txt'
driver.download_file(downloadable_file, target_directory)
file_content = File.read("#{target_directory}/#{downloadable_file}").strip
expect(file_content).to eq('Hello, World!')
driver.delete_downloadable_files
expect(driver.downloadable_files).to be_empty
end
end
对于远程WebDriver会话, 上传文件 更为复杂, 因为要上传的文件可能在执行代码的计算机上, 但远程计算机上的驱动程序正在其本地文件系统上查找提供的路径. 解决方案是使用本地文件检测器. 设置一个后, Selenium将捆绑文件, 并将其发送到远程计算机, 以便驱动程序可以看到对它的引用. 默认情况下, 某些实现包含一个基本的本地文件检测器, 并且所有这些实现都允许自定义文件检测器.
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
Python adds a local file detector to remote webdriver instances by default, but you can also create your own class.
driver.file_detector = LocalFileDetector()
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(upload_file)
driver.find_element(By.ID, "file-submit").click()import os
import sys
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote(grid_url):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_url, options=options)
assert "localhost" in driver.command_executor._client_config.remote_server_addr
driver.quit()
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_uploads(server):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=server, options=options)
driver.get("https://the-internet.herokuapp.com/upload")
upload_file = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "selenium-snapshot.png"))
driver.file_detector = LocalFileDetector()
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(upload_file)
driver.find_element(By.ID, "file-submit").click()
file_name_element = driver.find_element(By.ID, "uploaded-files")
file_name = file_name_element.text
assert file_name == "selenium-snapshot.png"
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_downloads(server, temp_dir):
options = get_default_chrome_options()
options.enable_downloads = True
driver = webdriver.Remote(command_executor=server, options=options)
file_names = ["file_1.txt", "file_2.jpg"]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(By.ID, "file-1").click()
driver.find_element(By.ID, "file-2").click()
WebDriverWait(driver, 3).until(lambda d: "file_2.jpg" in d.get_downloadable_files())
files = driver.get_downloadable_files()
assert sorted(files) == sorted(file_names)
downloadable_file = file_names[0]
target_directory = temp_dir
driver.download_file(downloadable_file, target_directory)
target_file = os.path.join(target_directory, downloadable_file)
with open(target_file, "r") as file:
assert "Hello, World!" in file.read()
driver.delete_downloadable_files()
assert not driver.get_downloadable_files()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup()
{
await StartServer();
}
[TestMethod]
public void RunRemote()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
Assert.IsInstanceOfType(driver, typeof(IHasDownloads));
}
[TestMethod]
public void Uploads()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://the-internet.herokuapp.com/upload";
string baseDirectory = AppContext.BaseDirectory;
string relativePath = "../../../TestSupport/selenium-snapshot.png";
string uploadFile = Path.GetFullPath(Path.Combine(baseDirectory, relativePath));
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();
IWebElement fileName = driver.FindElement(By.Id("uploaded-files"));
Assert.AreEqual("selenium-snapshot.png", fileName.Text);
}
[TestMethod]
public void Downloads()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
driver.FindElement(By.Id("file-1")).Click();
driver.FindElement(By.Id("file-2")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
Assert.IsTrue(names.Contains("file_1.txt"));
Assert.IsTrue(names.Contains("file_2.jpg"));
string downloadableFile = names.First(f => f == "file_1.txt");
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
string fileContent = File.ReadAllText(Path.Combine(targetDirectory, downloadableFile));
Assert.AreEqual("Hello, World!", fileContent.Trim());
((RemoteWebDriver)driver).DeleteDownloadableFiles();
Assert.IsTrue(((RemoteWebDriver)driver).GetDownloadableFiles().IsNullOrEmpty());
Directory.Delete(targetDirectory, recursive: true);
}
[TestMethod]
public void CustomExecutor()
{
driver = new RemoteWebDriver(GridUrl, new FirefoxOptions());
driver.Navigate().GoToUrl("https://www.selenium.dev/");
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);
Screenshot image = new Screenshot((string)screenshotResponse);
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(targetDirectory);
string targetFile = Path.GetFullPath(Path.Combine(targetDirectory, "fullPage.png"));
using (var memoryStream = new MemoryStream(image.AsByteArray))
using (var fileStream = new FileStream(targetFile, FileMode.Create))
{
memoryStream.WriteTo(fileStream);
}
Assert.IsTrue(File.Exists(targetFile));
Directory.Delete(targetDirectory, true);
}
}
} driver.file_detector = ->((filename, *)) { filename.include?('selenium') && filename }
file_input = driver.find_element(css: 'input[type=file]')
file_input.send_keys(upload_file)
driver.find_element(id: 'file-submit').click# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec.describe 'Remote WebDriver' do
let(:target_directory) { File.join(Dir.tmpdir, SecureRandom.uuid) }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
let(:server) do
Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.46.0.jar'), __dir__),
background: true,
args: %w[--selenium-manager true --enable-managed-downloads true])
end
let(:grid_url) { server.webdriver_url }
before { server.start }
after { server.stop }
it 'starts remotely' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
expect { driver.session_id }.not_to raise_exception
end
it 'uploads' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: server.webdriver_url, options: options
driver.get('https://the-internet.herokuapp.com/upload')
upload_file = File.expand_path('../spec_support/selenium-snapshot.png', __dir__)
driver.file_detector = ->((filename, *)) { filename.include?('selenium') && filename }
file_input = driver.find_element(css: 'input[type=file]')
file_input.send_keys(upload_file)
driver.find_element(id: 'file-submit').click
wait.until { driver.find_element(id: 'uploaded-files') }
expect(driver.find_element(id: 'uploaded-files').text).to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium::WebDriver::Options.chrome(enable_downloads: true)
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
file_names = %w[file_1.txt file_2.jpg]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(id: 'file-1').click
driver.find_element(id: 'file-2').click
wait.until { driver.downloadable_files.include?('file_2.jpg') && driver.downloadable_files.include?('file_1.txt') }
files = driver.downloadable_files
expect(files.sort).to eq file_names.sort
downloadable_file = 'file_1.txt'
driver.download_file(downloadable_file, target_directory)
file_content = File.read("#{target_directory}/#{downloadable_file}").strip
expect(file_content).to eq('Hello, World!')
driver.delete_downloadable_files
expect(driver.downloadable_files).to be_empty
end
end
Chrome、Edge和Firefox都允许您设置下载目录的位置. 但是, 当您在远程计算机上执行此操作时, 位置在远程计算机的本地文件系统上. Selenium允许您启用下载功能, 将这些文件下载到客户端计算机上.
当以节点或独立模式启动网格时, 你必须添加参数:
--enable-managed-downloads true
网格使用 se:downloadsEnabled 功能来切换是否负责管理浏览器位置.
每个实现在options类中都有一个方法来设置.
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
options = get_default_chrome_options()
options.enable_downloads = True
driver = webdriver.Remote(command_executor=server, options=options)import os
import sys
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote(grid_url):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_url, options=options)
assert "localhost" in driver.command_executor._client_config.remote_server_addr
driver.quit()
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_uploads(server):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=server, options=options)
driver.get("https://the-internet.herokuapp.com/upload")
upload_file = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "selenium-snapshot.png"))
driver.file_detector = LocalFileDetector()
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(upload_file)
driver.find_element(By.ID, "file-submit").click()
file_name_element = driver.find_element(By.ID, "uploaded-files")
file_name = file_name_element.text
assert file_name == "selenium-snapshot.png"
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_downloads(server, temp_dir):
options = get_default_chrome_options()
options.enable_downloads = True
driver = webdriver.Remote(command_executor=server, options=options)
file_names = ["file_1.txt", "file_2.jpg"]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(By.ID, "file-1").click()
driver.find_element(By.ID, "file-2").click()
WebDriverWait(driver, 3).until(lambda d: "file_2.jpg" in d.get_downloadable_files())
files = driver.get_downloadable_files()
assert sorted(files) == sorted(file_names)
downloadable_file = file_names[0]
target_directory = temp_dir
driver.download_file(downloadable_file, target_directory)
target_file = os.path.join(target_directory, downloadable_file)
with open(target_file, "r") as file:
assert "Hello, World!" in file.read()
driver.delete_downloadable_files()
assert not driver.get_downloadable_files()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup()
{
await StartServer();
}
[TestMethod]
public void RunRemote()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
Assert.IsInstanceOfType(driver, typeof(IHasDownloads));
}
[TestMethod]
public void Uploads()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://the-internet.herokuapp.com/upload";
string baseDirectory = AppContext.BaseDirectory;
string relativePath = "../../../TestSupport/selenium-snapshot.png";
string uploadFile = Path.GetFullPath(Path.Combine(baseDirectory, relativePath));
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();
IWebElement fileName = driver.FindElement(By.Id("uploaded-files"));
Assert.AreEqual("selenium-snapshot.png", fileName.Text);
}
[TestMethod]
public void Downloads()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
driver.FindElement(By.Id("file-1")).Click();
driver.FindElement(By.Id("file-2")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
Assert.IsTrue(names.Contains("file_1.txt"));
Assert.IsTrue(names.Contains("file_2.jpg"));
string downloadableFile = names.First(f => f == "file_1.txt");
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
string fileContent = File.ReadAllText(Path.Combine(targetDirectory, downloadableFile));
Assert.AreEqual("Hello, World!", fileContent.Trim());
((RemoteWebDriver)driver).DeleteDownloadableFiles();
Assert.IsTrue(((RemoteWebDriver)driver).GetDownloadableFiles().IsNullOrEmpty());
Directory.Delete(targetDirectory, recursive: true);
}
[TestMethod]
public void CustomExecutor()
{
driver = new RemoteWebDriver(GridUrl, new FirefoxOptions());
driver.Navigate().GoToUrl("https://www.selenium.dev/");
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);
Screenshot image = new Screenshot((string)screenshotResponse);
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(targetDirectory);
string targetFile = Path.GetFullPath(Path.Combine(targetDirectory, "fullPage.png"));
using (var memoryStream = new MemoryStream(image.AsByteArray))
using (var fileStream = new FileStream(targetFile, FileMode.Create))
{
memoryStream.WriteTo(fileStream);
}
Assert.IsTrue(File.Exists(targetFile));
Directory.Delete(targetDirectory, true);
}
}
} options = Selenium::WebDriver::Options.chrome(enable_downloads: true)
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec.describe 'Remote WebDriver' do
let(:target_directory) { File.join(Dir.tmpdir, SecureRandom.uuid) }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
let(:server) do
Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.46.0.jar'), __dir__),
background: true,
args: %w[--selenium-manager true --enable-managed-downloads true])
end
let(:grid_url) { server.webdriver_url }
before { server.start }
after { server.stop }
it 'starts remotely' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
expect { driver.session_id }.not_to raise_exception
end
it 'uploads' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: server.webdriver_url, options: options
driver.get('https://the-internet.herokuapp.com/upload')
upload_file = File.expand_path('../spec_support/selenium-snapshot.png', __dir__)
driver.file_detector = ->((filename, *)) { filename.include?('selenium') && filename }
file_input = driver.find_element(css: 'input[type=file]')
file_input.send_keys(upload_file)
driver.find_element(id: 'file-submit').click
wait.until { driver.find_element(id: 'uploaded-files') }
expect(driver.find_element(id: 'uploaded-files').text).to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium::WebDriver::Options.chrome(enable_downloads: true)
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
file_names = %w[file_1.txt file_2.jpg]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(id: 'file-1').click
driver.find_element(id: 'file-2').click
wait.until { driver.downloadable_files.include?('file_2.jpg') && driver.downloadable_files.include?('file_1.txt') }
files = driver.downloadable_files
expect(files.sort).to eq file_names.sort
downloadable_file = 'file_1.txt'
driver.download_file(downloadable_file, target_directory)
file_content = File.read("#{target_directory}/#{downloadable_file}").strip
expect(file_content).to eq('Hello, World!')
driver.delete_downloadable_files
expect(driver.downloadable_files).to be_empty
end
end
请注意, Selenium不会等待文件下载完成, 因此, 该列表是给定会话目录中当前文件名的即时快照.
List<String> files = ((HasDownloads) driver).getDownloadableFiles();package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
files = driver.get_downloadable_files()import os
import sys
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote(grid_url):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_url, options=options)
assert "localhost" in driver.command_executor._client_config.remote_server_addr
driver.quit()
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_uploads(server):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=server, options=options)
driver.get("https://the-internet.herokuapp.com/upload")
upload_file = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "selenium-snapshot.png"))
driver.file_detector = LocalFileDetector()
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(upload_file)
driver.find_element(By.ID, "file-submit").click()
file_name_element = driver.find_element(By.ID, "uploaded-files")
file_name = file_name_element.text
assert file_name == "selenium-snapshot.png"
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_downloads(server, temp_dir):
options = get_default_chrome_options()
options.enable_downloads = True
driver = webdriver.Remote(command_executor=server, options=options)
file_names = ["file_1.txt", "file_2.jpg"]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(By.ID, "file-1").click()
driver.find_element(By.ID, "file-2").click()
WebDriverWait(driver, 3).until(lambda d: "file_2.jpg" in d.get_downloadable_files())
files = driver.get_downloadable_files()
assert sorted(files) == sorted(file_names)
downloadable_file = file_names[0]
target_directory = temp_dir
driver.download_file(downloadable_file, target_directory)
target_file = os.path.join(target_directory, downloadable_file)
with open(target_file, "r") as file:
assert "Hello, World!" in file.read()
driver.delete_downloadable_files()
assert not driver.get_downloadable_files()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup()
{
await StartServer();
}
[TestMethod]
public void RunRemote()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
Assert.IsInstanceOfType(driver, typeof(IHasDownloads));
}
[TestMethod]
public void Uploads()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://the-internet.herokuapp.com/upload";
string baseDirectory = AppContext.BaseDirectory;
string relativePath = "../../../TestSupport/selenium-snapshot.png";
string uploadFile = Path.GetFullPath(Path.Combine(baseDirectory, relativePath));
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();
IWebElement fileName = driver.FindElement(By.Id("uploaded-files"));
Assert.AreEqual("selenium-snapshot.png", fileName.Text);
}
[TestMethod]
public void Downloads()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
driver.FindElement(By.Id("file-1")).Click();
driver.FindElement(By.Id("file-2")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
Assert.IsTrue(names.Contains("file_1.txt"));
Assert.IsTrue(names.Contains("file_2.jpg"));
string downloadableFile = names.First(f => f == "file_1.txt");
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
string fileContent = File.ReadAllText(Path.Combine(targetDirectory, downloadableFile));
Assert.AreEqual("Hello, World!", fileContent.Trim());
((RemoteWebDriver)driver).DeleteDownloadableFiles();
Assert.IsTrue(((RemoteWebDriver)driver).GetDownloadableFiles().IsNullOrEmpty());
Directory.Delete(targetDirectory, recursive: true);
}
[TestMethod]
public void CustomExecutor()
{
driver = new RemoteWebDriver(GridUrl, new FirefoxOptions());
driver.Navigate().GoToUrl("https://www.selenium.dev/");
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);
Screenshot image = new Screenshot((string)screenshotResponse);
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(targetDirectory);
string targetFile = Path.GetFullPath(Path.Combine(targetDirectory, "fullPage.png"));
using (var memoryStream = new MemoryStream(image.AsByteArray))
using (var fileStream = new FileStream(targetFile, FileMode.Create))
{
memoryStream.WriteTo(fileStream);
}
Assert.IsTrue(File.Exists(targetFile));
Directory.Delete(targetDirectory, true);
}
}
} files = driver.downloadable_files# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec.describe 'Remote WebDriver' do
let(:target_directory) { File.join(Dir.tmpdir, SecureRandom.uuid) }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
let(:server) do
Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.46.0.jar'), __dir__),
background: true,
args: %w[--selenium-manager true --enable-managed-downloads true])
end
let(:grid_url) { server.webdriver_url }
before { server.start }
after { server.stop }
it 'starts remotely' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
expect { driver.session_id }.not_to raise_exception
end
it 'uploads' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: server.webdriver_url, options: options
driver.get('https://the-internet.herokuapp.com/upload')
upload_file = File.expand_path('../spec_support/selenium-snapshot.png', __dir__)
driver.file_detector = ->((filename, *)) { filename.include?('selenium') && filename }
file_input = driver.find_element(css: 'input[type=file]')
file_input.send_keys(upload_file)
driver.find_element(id: 'file-submit').click
wait.until { driver.find_element(id: 'uploaded-files') }
expect(driver.find_element(id: 'uploaded-files').text).to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium::WebDriver::Options.chrome(enable_downloads: true)
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
file_names = %w[file_1.txt file_2.jpg]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(id: 'file-1').click
driver.find_element(id: 'file-2').click
wait.until { driver.downloadable_files.include?('file_2.jpg') && driver.downloadable_files.include?('file_1.txt') }
files = driver.downloadable_files
expect(files.sort).to eq file_names.sort
downloadable_file = 'file_1.txt'
driver.download_file(downloadable_file, target_directory)
file_content = File.read("#{target_directory}/#{downloadable_file}").strip
expect(file_content).to eq('Hello, World!')
driver.delete_downloadable_files
expect(driver.downloadable_files).to be_empty
end
end
Selenium在列表中查找提供的文件的名称, 并将其下载到提供的目标目录.
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
driver.download_file(downloadable_file, target_directory)import os
import sys
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote(grid_url):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_url, options=options)
assert "localhost" in driver.command_executor._client_config.remote_server_addr
driver.quit()
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_uploads(server):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=server, options=options)
driver.get("https://the-internet.herokuapp.com/upload")
upload_file = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "selenium-snapshot.png"))
driver.file_detector = LocalFileDetector()
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(upload_file)
driver.find_element(By.ID, "file-submit").click()
file_name_element = driver.find_element(By.ID, "uploaded-files")
file_name = file_name_element.text
assert file_name == "selenium-snapshot.png"
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_downloads(server, temp_dir):
options = get_default_chrome_options()
options.enable_downloads = True
driver = webdriver.Remote(command_executor=server, options=options)
file_names = ["file_1.txt", "file_2.jpg"]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(By.ID, "file-1").click()
driver.find_element(By.ID, "file-2").click()
WebDriverWait(driver, 3).until(lambda d: "file_2.jpg" in d.get_downloadable_files())
files = driver.get_downloadable_files()
assert sorted(files) == sorted(file_names)
downloadable_file = file_names[0]
target_directory = temp_dir
driver.download_file(downloadable_file, target_directory)
target_file = os.path.join(target_directory, downloadable_file)
with open(target_file, "r") as file:
assert "Hello, World!" in file.read()
driver.delete_downloadable_files()
assert not driver.get_downloadable_files()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup()
{
await StartServer();
}
[TestMethod]
public void RunRemote()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
Assert.IsInstanceOfType(driver, typeof(IHasDownloads));
}
[TestMethod]
public void Uploads()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://the-internet.herokuapp.com/upload";
string baseDirectory = AppContext.BaseDirectory;
string relativePath = "../../../TestSupport/selenium-snapshot.png";
string uploadFile = Path.GetFullPath(Path.Combine(baseDirectory, relativePath));
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();
IWebElement fileName = driver.FindElement(By.Id("uploaded-files"));
Assert.AreEqual("selenium-snapshot.png", fileName.Text);
}
[TestMethod]
public void Downloads()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
driver.FindElement(By.Id("file-1")).Click();
driver.FindElement(By.Id("file-2")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
Assert.IsTrue(names.Contains("file_1.txt"));
Assert.IsTrue(names.Contains("file_2.jpg"));
string downloadableFile = names.First(f => f == "file_1.txt");
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
string fileContent = File.ReadAllText(Path.Combine(targetDirectory, downloadableFile));
Assert.AreEqual("Hello, World!", fileContent.Trim());
((RemoteWebDriver)driver).DeleteDownloadableFiles();
Assert.IsTrue(((RemoteWebDriver)driver).GetDownloadableFiles().IsNullOrEmpty());
Directory.Delete(targetDirectory, recursive: true);
}
[TestMethod]
public void CustomExecutor()
{
driver = new RemoteWebDriver(GridUrl, new FirefoxOptions());
driver.Navigate().GoToUrl("https://www.selenium.dev/");
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);
Screenshot image = new Screenshot((string)screenshotResponse);
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(targetDirectory);
string targetFile = Path.GetFullPath(Path.Combine(targetDirectory, "fullPage.png"));
using (var memoryStream = new MemoryStream(image.AsByteArray))
using (var fileStream = new FileStream(targetFile, FileMode.Create))
{
memoryStream.WriteTo(fileStream);
}
Assert.IsTrue(File.Exists(targetFile));
Directory.Delete(targetDirectory, true);
}
}
} driver.download_file(downloadable_file, target_directory)# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec.describe 'Remote WebDriver' do
let(:target_directory) { File.join(Dir.tmpdir, SecureRandom.uuid) }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
let(:server) do
Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.46.0.jar'), __dir__),
background: true,
args: %w[--selenium-manager true --enable-managed-downloads true])
end
let(:grid_url) { server.webdriver_url }
before { server.start }
after { server.stop }
it 'starts remotely' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
expect { driver.session_id }.not_to raise_exception
end
it 'uploads' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: server.webdriver_url, options: options
driver.get('https://the-internet.herokuapp.com/upload')
upload_file = File.expand_path('../spec_support/selenium-snapshot.png', __dir__)
driver.file_detector = ->((filename, *)) { filename.include?('selenium') && filename }
file_input = driver.find_element(css: 'input[type=file]')
file_input.send_keys(upload_file)
driver.find_element(id: 'file-submit').click
wait.until { driver.find_element(id: 'uploaded-files') }
expect(driver.find_element(id: 'uploaded-files').text).to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium::WebDriver::Options.chrome(enable_downloads: true)
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
file_names = %w[file_1.txt file_2.jpg]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(id: 'file-1').click
driver.find_element(id: 'file-2').click
wait.until { driver.downloadable_files.include?('file_2.jpg') && driver.downloadable_files.include?('file_1.txt') }
files = driver.downloadable_files
expect(files.sort).to eq file_names.sort
downloadable_file = 'file_1.txt'
driver.download_file(downloadable_file, target_directory)
file_content = File.read("#{target_directory}/#{downloadable_file}").strip
expect(file_content).to eq('Hello, World!')
driver.delete_downloadable_files
expect(driver.downloadable_files).to be_empty
end
end
默认情况下, 下载目录在可用会话结束时被删除, 但您也可以在会话期间删除所有文件.
((HasDownloads) driver).deleteDownloadableFiles();package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
driver.delete_downloadable_files()import os
import sys
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_start_remote(grid_url):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=grid_url, options=options)
assert "localhost" in driver.command_executor._client_config.remote_server_addr
driver.quit()
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_uploads(server):
options = get_default_chrome_options()
driver = webdriver.Remote(command_executor=server, options=options)
driver.get("https://the-internet.herokuapp.com/upload")
upload_file = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "selenium-snapshot.png"))
driver.file_detector = LocalFileDetector()
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(upload_file)
driver.find_element(By.ID, "file-submit").click()
file_name_element = driver.find_element(By.ID, "uploaded-files")
file_name = file_name_element.text
assert file_name == "selenium-snapshot.png"
@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
def test_downloads(server, temp_dir):
options = get_default_chrome_options()
options.enable_downloads = True
driver = webdriver.Remote(command_executor=server, options=options)
file_names = ["file_1.txt", "file_2.jpg"]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(By.ID, "file-1").click()
driver.find_element(By.ID, "file-2").click()
WebDriverWait(driver, 3).until(lambda d: "file_2.jpg" in d.get_downloadable_files())
files = driver.get_downloadable_files()
assert sorted(files) == sorted(file_names)
downloadable_file = file_names[0]
target_directory = temp_dir
driver.download_file(downloadable_file, target_directory)
target_file = os.path.join(target_directory, downloadable_file)
with open(target_file, "r") as file:
assert "Hello, World!" in file.read()
driver.delete_downloadable_files()
assert not driver.get_downloadable_files()
def get_default_chrome_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
return options
((RemoteWebDriver)driver).DeleteDownloadableFiles();using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup()
{
await StartServer();
}
[TestMethod]
public void RunRemote()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
Assert.IsInstanceOfType(driver, typeof(IHasDownloads));
}
[TestMethod]
public void Uploads()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://the-internet.herokuapp.com/upload";
string baseDirectory = AppContext.BaseDirectory;
string relativePath = "../../../TestSupport/selenium-snapshot.png";
string uploadFile = Path.GetFullPath(Path.Combine(baseDirectory, relativePath));
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();
IWebElement fileName = driver.FindElement(By.Id("uploaded-files"));
Assert.AreEqual("selenium-snapshot.png", fileName.Text);
}
[TestMethod]
public void Downloads()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
driver.FindElement(By.Id("file-1")).Click();
driver.FindElement(By.Id("file-2")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
Assert.IsTrue(names.Contains("file_1.txt"));
Assert.IsTrue(names.Contains("file_2.jpg"));
string downloadableFile = names.First(f => f == "file_1.txt");
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
string fileContent = File.ReadAllText(Path.Combine(targetDirectory, downloadableFile));
Assert.AreEqual("Hello, World!", fileContent.Trim());
((RemoteWebDriver)driver).DeleteDownloadableFiles();
Assert.IsTrue(((RemoteWebDriver)driver).GetDownloadableFiles().IsNullOrEmpty());
Directory.Delete(targetDirectory, recursive: true);
}
[TestMethod]
public void CustomExecutor()
{
driver = new RemoteWebDriver(GridUrl, new FirefoxOptions());
driver.Navigate().GoToUrl("https://www.selenium.dev/");
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);
Screenshot image = new Screenshot((string)screenshotResponse);
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(targetDirectory);
string targetFile = Path.GetFullPath(Path.Combine(targetDirectory, "fullPage.png"));
using (var memoryStream = new MemoryStream(image.AsByteArray))
using (var fileStream = new FileStream(targetFile, FileMode.Create))
{
memoryStream.WriteTo(fileStream);
}
Assert.IsTrue(File.Exists(targetFile));
Directory.Delete(targetDirectory, true);
}
}
} driver.delete_downloadable_files# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec.describe 'Remote WebDriver' do
let(:target_directory) { File.join(Dir.tmpdir, SecureRandom.uuid) }
let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
let(:server) do
Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.46.0.jar'), __dir__),
background: true,
args: %w[--selenium-manager true --enable-managed-downloads true])
end
let(:grid_url) { server.webdriver_url }
before { server.start }
after { server.stop }
it 'starts remotely' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
expect { driver.session_id }.not_to raise_exception
end
it 'uploads' do
options = Selenium::WebDriver::Options.chrome
driver = Selenium::WebDriver.for :remote, url: server.webdriver_url, options: options
driver.get('https://the-internet.herokuapp.com/upload')
upload_file = File.expand_path('../spec_support/selenium-snapshot.png', __dir__)
driver.file_detector = ->((filename, *)) { filename.include?('selenium') && filename }
file_input = driver.find_element(css: 'input[type=file]')
file_input.send_keys(upload_file)
driver.find_element(id: 'file-submit').click
wait.until { driver.find_element(id: 'uploaded-files') }
expect(driver.find_element(id: 'uploaded-files').text).to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium::WebDriver::Options.chrome(enable_downloads: true)
driver = Selenium::WebDriver.for :remote, url: grid_url, options: options
file_names = %w[file_1.txt file_2.jpg]
driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
driver.find_element(id: 'file-1').click
driver.find_element(id: 'file-2').click
wait.until { driver.downloadable_files.include?('file_2.jpg') && driver.downloadable_files.include?('file_1.txt') }
files = driver.downloadable_files
expect(files.sort).to eq file_names.sort
downloadable_file = 'file_1.txt'
driver.download_file(downloadable_file, target_directory)
file_content = File.read("#{target_directory}/#{downloadable_file}").strip
expect(file_content).to eq('Hello, World!')
driver.delete_downloadable_files
expect(driver.downloadable_files).to be_empty
end
end
每个浏览器 都实现了仅对该浏览器可用的特殊功能. 每种Selenium实现都实现了在远程会话中使用这些功能的不同方式
Java requires you to use the Augmenter class, which allows it to automatically pull in implementations for all interfaces that match the capabilities used with the RemoteWebDriver
driver = new Augmenter().augment(driver);package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
Of interest, using the RemoteWebDriverBuilder automatically augments the driver, so it is a great way
to get all the functionality by default:
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();package dev.selenium.drivers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.HasDownloads;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.HasCasting;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.LocalFileDetector;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl;
@BeforeEach
public void startGrid() {
gridUrl = startStandaloneGrid();
}
@Test
public void runRemote() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
}
@Test
public void uploads() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver.get("https://the-internet.herokuapp.com/upload");
File uploadFile = new File("src/test/resources/selenium-snapshot.png");
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
fileInput.sendKeys(uploadFile.getAbsolutePath());
driver.findElement(By.id("file-submit")).click();
WebElement fileName = driver.findElement(By.id("uploaded-files"));
Assertions.assertEquals("selenium-snapshot.png", fileName.getText());
}
@Test
public void downloads() throws IOException {
ChromeOptions options = getDefaultChromeOptions();
options.setEnableDownloads(true);
driver = new RemoteWebDriver(gridUrl, options);
List<String> fileNames = new ArrayList<>();
fileNames.add("file_1.txt");
fileNames.add("file_2.jpg");
driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
driver.findElement(By.id("file-1")).click();
driver.findElement(By.id("file-2")).click();
new WebDriverWait(driver, Duration.ofSeconds(5))
.until(d -> ((HasDownloads) d).getDownloadableFiles().contains("file_2.jpg"));
List<String> files = ((HasDownloads) driver).getDownloadableFiles();
// Sorting them to avoid differences when comparing the files
fileNames.sort(Comparator.naturalOrder());
files.sort(Comparator.naturalOrder());
Assertions.assertEquals(fileNames, files);
String downloadableFile = files.get(0);
Path targetDirectory = Files.createTempDirectory("download");
((HasDownloads) driver).downloadFile(downloadableFile, targetDirectory);
String fileContent = String.join("", Files.readAllLines(targetDirectory.resolve(downloadableFile)));
Assertions.assertEquals("Hello, World!", fileContent);
((HasDownloads) driver).deleteDownloadableFiles();
Assertions.assertTrue(((HasDownloads) driver).getDownloadableFiles().isEmpty());
}
@Test
public void augment() {
ChromeOptions options = getDefaultChromeOptions();
driver = new RemoteWebDriver(gridUrl, options);
driver = new Augmenter().augment(driver);
Assertions.assertTrue(driver instanceof HasCasting);
}
@Test
public void remoteWebDriverBuilder() {
driver =
RemoteWebDriver.builder()
.address(gridUrl)
.oneOf(getDefaultChromeOptions())
.setCapability("ext:options", Map.of("key", "value"))
.config(ClientConfig.defaultConfig())
.build();
Assertions.assertTrue(driver instanceof HasCasting);
}
}
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Tokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup()
{
await StartServer();
}
[TestMethod]
public void RunRemote()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
Assert.IsInstanceOfType(driver, typeof(IHasDownloads));
}
[TestMethod]
public void Uploads()
{
var options = new ChromeOptions();
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://the-internet.herokuapp.com/upload";
string baseDirectory = AppContext.BaseDirectory;
string relativePath = "../../../TestSupport/selenium-snapshot.png";
string uploadFile = Path.GetFullPath(Path.Combine(baseDirectory, relativePath));
((RemoteWebDriver)driver).FileDetector = new LocalFileDetector();
IWebElement fileInput = driver.FindElement(By.CssSelector("input[type=file]"));
fileInput.SendKeys(uploadFile);
driver.FindElement(By.Id("file-submit")).Click();
IWebElement fileName = driver.FindElement(By.Id("uploaded-files"));
Assert.AreEqual("selenium-snapshot.png", fileName.Text);
}
[TestMethod]
public void Downloads()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver(GridUrl, options);
driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
driver.FindElement(By.Id("file-1")).Click();
driver.FindElement(By.Id("file-2")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
Assert.IsTrue(names.Contains("file_1.txt"));
Assert.IsTrue(names.Contains("file_2.jpg"));
string downloadableFile = names.First(f => f == "file_1.txt");
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
string fileContent = File.ReadAllText(Path.Combine(targetDirectory, downloadableFile));
Assert.AreEqual("Hello, World!", fileContent.Trim());
((RemoteWebDriver)driver).DeleteDownloadableFiles();
Assert.IsTrue(((RemoteWebDriver)driver).GetDownloadableFiles().IsNullOrEmpty());
Directory.Delete(targetDirectory, recursive: true);
}
[TestMethod]
public void CustomExecutor()
{
driver = new RemoteWebDriver(GridUrl, new FirefoxOptions());
driver.Navigate().GoToUrl("https://www.selenium.dev/");
var customCommandDriver = driver as ICustomDriverCommandExecutor;
customCommandDriver.RegisterCustomDriverCommands(FirefoxDriver.CustomCommandDefinitions);
var screenshotResponse = customCommandDriver
.ExecuteCustomDriverCommand(FirefoxDriver.GetFullPageScreenshotCommand, null);
Screenshot image = new Screenshot((string)screenshotResponse);
string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(targetDirectory);
string targetFile = Path.GetFullPath(Path.Combine(targetDirectory, "fullPage.png"));
using (var memoryStream = new MemoryStream(image.AsByteArray))
using (var fileStream = new FileStream(targetFile, FileMode.Create))
{
memoryStream.WriteTo(fileStream);
}
Assert.IsTrue(File.Exists(targetFile));
Directory.Delete(targetDirectory, true);
}
}
}此功能仅适用于Java客户端绑定 (Beta版以后). 远程WebDriver客户端向Selenium网格服务器发送请求, 后者将请求传递给WebDriver. 应该在服务器端和客户端启用跟踪, 以便端到端地追踪HTTP请求. 两端都应该有一个指向可视化框架的追踪导出器设置. 默认情况下, 对客户端和服务器都启用追踪. 若设置可视化框架Jaeger UI及Selenium Grid 4, 请参阅所需版本的追踪设置 .
对于客户端设置, 请执行以下步骤.
可以使用Maven安装追踪导出器的外部库. 在项目pom.xml中添加 opentelemetry-exporter-jaeger 和 grpc-netty 的依赖项:
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-jaeger</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.35.0</version>
</dependency>
System.setProperty("otel.traces.exporter", "jaeger");
System.setProperty("otel.exporter.jaeger.endpoint", "http://localhost:14250");
System.setProperty("otel.resource.attributes", "service.name=selenium-java-client");
ImmutableCapabilities capabilities = new ImmutableCapabilities("browserName", "chrome");
WebDriver driver = new RemoteWebDriver(new URL("http://www.example.com"), capabilities);
driver.get("http://www.google.com");
driver.quit();
有关所需Selenium版本 及其外部依赖关系版本等更多信息, 请参阅追踪设置 .
更多信息请访问:
每个浏览器都有定制和特有的功能。
默认情况下,Selenium 4与Chrome v75及更高版本兼容. 但是请注意Chrome浏览器的版本与chromedriver的主版本需要匹配.
所有浏览器的通用功能请看这 Options page.
Chrome浏览器的特有功能可以在谷歌的页面找到: Capabilities & ChromeOptions
基于默认选项的Chrome浏览器会话看起来是这样:
ChromeOptions options = getDefaultChromeOptions();
driver = new ChromeDriver(options);package dev.selenium.browsers;
import dev.selenium.BaseTest;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.regex.Pattern;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.OS;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.bidi.webextension.ExtensionPath;
import org.openqa.selenium.bidi.webextension.InstallExtensionParameters;
import org.openqa.selenium.bidi.webextension.WebExtension;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chromium.ChromiumDriverLogLevel;
import org.openqa.selenium.chromium.ChromiumNetworkConditions;
import org.openqa.selenium.logging.*;
import org.openqa.selenium.remote.service.DriverFinder;
public class ChromeTest extends BaseTest {
@AfterEach
public void clearProperties() {
System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);
System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);
}
@Test
public void basicOptions() {
ChromeOptions options = getDefaultChromeOptions();
driver = new ChromeDriver(options);
}
@Test
public void arguments() {
ChromeOptions options = getDefaultChromeOptions();
options.addArguments("--start-maximized");
driver = new ChromeDriver(options);
}
@Test
public void setBrowserLocation() {
ChromeOptions options = getDefaultChromeOptions();
options.setBinary(getChromeLocation());
driver = new ChromeDriver(options);
}
@Test
@DisabledOnOs(OS.WINDOWS)
public void extensionOptions() {
ChromeOptions options = getDefaultChromeOptions();
options.enableBiDi();
options.addArguments("--remote-debugging-pipe");
options.addArguments("--enable-unsafe-extension-debugging");
driver = new ChromeDriver(options);
Path path = Paths.get("src/test/resources/extensions/selenium-example");
WebExtension extension = new WebExtension(driver);
ExtensionPath extensionPath = new ExtensionPath(path.toString());
InstallExtensionParameters parameters = new InstallExtensionParameters(extensionPath);
extension.install(parameters);
driver.get("https://www.selenium.dev/selenium/web/blank.html");
WebElement injected = driver.findElement(By.id("webextensions-selenium-example"));
Assertions.assertEquals(
"Content injected by webextensions-selenium-example", injected.getText());
}
@Test
public void excludeSwitches() {
ChromeOptions options = getDefaultChromeOptions();
options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking"));
driver = new ChromeDriver(options);
}
@Test
public void loggingPreferences() {
ChromeOptions options = getDefaultChromeOptions();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
options.setCapability(ChromeOptions.LOGGING_PREFS, logPrefs);
driver = new ChromeDriver(options);
driver.get("https://www.selenium.dev");
LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE);
Assertions.assertFalse(logEntries.getAll().isEmpty());
}
@Test
public void logsToFile() throws IOException {
File logLocation = getTempFile("logsToFile", ".log");
ChromeDriverService service =
new ChromeDriverService.Builder().withLogFile(logLocation).build();
driver = new ChromeDriver(service);
String fileContent = new String(Files.readAllBytes(logLocation.toPath()));
Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));
}
@Test
public void logsToConsole() throws IOException {
File logLocation = getTempFile("logsToConsole", ".log");
System.setOut(new PrintStream(logLocation));
ChromeDriverService service =
new ChromeDriverService.Builder().withLogOutput(System.out).build();
driver = new ChromeDriver(service);
String fileContent = new String(Files.readAllBytes(logLocation.toPath()));
Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));
}
@Test
public void logsWithLevel() throws IOException {
File logLocation = getTempFile("logsWithLevel", ".log");
System.setProperty(
ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath());
ChromeDriverService service =
new ChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();
driver = new ChromeDriver(service);
String fileContent = new String(Files.readAllBytes(logLocation.toPath()));
Assertions.assertTrue(fileContent.contains("[DEBUG]:"));
}
@Test
public void configureDriverLogs() throws IOException {
File logLocation = getTempFile("configureDriverLogs", ".log");
System.setProperty(
ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath());
System.setProperty(
ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,
ChromiumDriverLogLevel.DEBUG.toString());
ChromeDriverService service =
new ChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();
driver = new ChromeDriver(service);
String fileContent = new String(Files.readAllBytes(logLocation.toPath()));
Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE);
Assertions.assertTrue(pattern.matcher(fileContent).find());
}
@Test
public void disableBuildChecks() throws IOException {
File logLocation = getTempFile("disableBuildChecks", ".log");
System.setProperty(
ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath());
System.setProperty(
ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,
ChromiumDriverLogLevel.WARNING.toString());
ChromeDriverService service =
new ChromeDriverService.Builder().withBuildCheckDisabled(true).build();
driver = new ChromeDriver(service);
String fileContent = new String(Files.readAllBytes(logLocation.toPath()));
String expected =
"[WARNING]: You are using an unsupported command-line switch: --disable-build-check";
Assertions.assertTrue(fileContent.contains(expected));
}
private File getChromeLocation() {
ChromeOptions options = getDefaultChromeOptions();
options.setBrowserVersion("stable");
DriverFinder finder = new DriverFinder(ChromeDriverService.createDefaultService(), options);
return new File(finder.getBrowserPath());
}
@Test
public void setPermission() {
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev");
driver.setPermission("camera", "denied");
// Verify the permission state is 'denied'
String script = "return navigator.permissions.query({ name: 'camera' })" +
" .then(permissionStatus => permissionStatus.state);";
String permissionState = (String) driver.executeScript(script);
Assertions.assertEquals("denied", permissionState);
driver.quit();
}
@Test
public void setNetworkConditions() {
driver = new ChromeDriver();
ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions();
networkConditions.setOffline(false);
networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency
networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps
networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps
((ChromeDriver) driver).setNetworkConditions(networkConditions);
driver.get("https://www.selenium.dev");
// Assert the network conditions are set as expected
ChromiumNetworkConditions actualConditions = ((ChromeDriver) driver).getNetworkConditions();
Assertions.assertAll(
() -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()),
() -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()),
() -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()),
() -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput())
);
((ChromeDriver) driver).deleteNetworkConditions();
driver.quit();
}
@Test
public void castFeatures() {
ChromeDriver driver = new ChromeDriver();
List<Map<String, String>> sinks = driver.getCastSinks();
if (!sinks.isEmpty()) {
String sinkName = sinks.get(0).get("name");
driver.startTabMirroring(sinkName);
driver.stopCasting(sinkName);
}
driver.quit();
}
@Test
public void getBrowserLogs() {
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
WebElement consoleLogButton = driver.findElement(By.id("consoleError"));
consoleLogButton.click();
LogEntries logs = driver.manage().logs().get(LogType.BROWSER);
// Assert that at least one log contains the expected message
boolean logFound = false;
for (LogEntry log : logs) {
if (log.getMessage().contains("I am console error")) {
logFound = true;
break;
}
}
Assertions.assertTrue(logFound, "No matching log message found.");
driver.quit();
}
}
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=options)import os
import re
import subprocess
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_basic_options():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=options)
driver.quit()
def test_args():
options = get_default_chrome_options()
options.add_argument("--start-maximized")
driver = webdriver.Chrome(options=options)
driver.get('http://selenium.dev')
driver.quit()
def test_set_browser_location(chrome_bin):
options = get_default_chrome_options()
options.binary_location = chrome_bin
driver = webdriver.Chrome(options=options)
driver.quit()
def test_add_extension():
options = get_default_chrome_options()
extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx")
options.add_extension(extension_file_path)
driver = webdriver.Chrome(options=options)
driver.get("https://www.selenium.dev/selenium/web/blank.html")
driver.quit()
def test_keep_browser_open():
options = get_default_chrome_options()
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=options)
driver.get('http://selenium.dev')
driver.quit()
def test_exclude_switches():
options = get_default_chrome_options()
options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])
driver = webdriver.Chrome(options=options)
driver.get('http://selenium.dev')
driver.quit()
def test_log_to_file(log_path):
service = webdriver.ChromeService(log_output=log_path)
driver = webdriver.Chrome(service=service)
with open(log_path, 'r') as fp:
assert "Starting ChromeDriver" in fp.readline()
driver.quit()
def test_log_to_stdout(capfd):
service = webdriver.ChromeService(log_output=subprocess.STDOUT)
driver = webdriver.Chrome(service=service)
out, err = capfd.readouterr()
assert "Starting ChromeDriver" in out
driver.quit()
def test_log_level(capfd):
service = webdriver.ChromeService(service_args=['--log-level=DEBUG'], log_output=subprocess.STDOUT)
driver = webdriver.Chrome(service=service)
out, err = capfd.readouterr()
assert '[DEBUG]' in err
driver.quit