浏览器选项
在 Selenium 3 中, capabilities是借助"Desired Capabilities"类定义于会话中的. 从 Selenium 4 开始, 您必须使用浏览器选项类. 对于远程驱动程序会话, 浏览器选项实例是必需的, 因为它确定将使用哪个浏览器.
这些选项在 Capabilities 的 w3c 规范中进行了描述.
每个浏览器都有 自定义选项 , 是规范定义之外的内容.
browserName
默认情况下,使用 Options 类实例时会设置浏览器名称.
ChromeOptions chromeOptions = getDefaultChromeOptions(); String name = chromeOptions.getBrowserName();
examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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'
examples/python/tests/drivers/test_options.py
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
examples/ruby/spec/drivers/options_spec.rb
# 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
browserVersion
此功能是可选的,用于在远程端设置可用的浏览器版本. 在最新版本的 Selenium 中,如果在系统上找不到该版本, 它将被 Selenium Manager 自动下载
ChromeOptions chromeOptions = getDefaultChromeOptions(); String version = "latest"; chromeOptions.setBrowserVersion(version);
examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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'
examples/python/tests/drivers/test_options.py
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'
examples/ruby/spec/drivers/options_spec.rb
# 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
pageLoadStrategy
共有三种类型的页面加载策略.
页面加载策略可以在此链接查询 document.readyState , 如下表所述:
策略 | 就绪状态 | 备注 |
---|---|---|
normal | complete | 默认值, 等待所有资源下载 |
eager | interactive | DOM 访问已准备就绪, 但诸如图像的其他资源可能仍在加载 |
none | Any | 完全不会阻塞 WebDriver |
文档的 document.readyState
属性描述当前文档的加载状态.
当通过URL导航到新页面时, 默认情况下, WebDriver将暂缓完成导航方法 (例如, driver.navigate().get())直到文档就绪状态完成. 这 并非意味着该页面已完成加载, 特别是对于使用 JavaScript 在就绪状态返回完成后 动态加载内容单页应用程序的站点. 另请注意此行为不适用于单击元素或提交表单后出现的导航行为.
如果由于下载对自动化不重要的资源(例如, 图像、css、js) 而需要很长时间才能加载页面, 您可以将默认参数normal
更改为 eager
或 none
以加快会话加载速度. 此值适用于整个会话, 因此请确保您的 等待策略 足够普适.
normal (默认值)
WebDriver一直等到 load 事件触发并返回.
ChromeOptions chromeOptions = getDefaultChromeOptions(); chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL); WebDriver driver = new ChromeDriver(chromeOptions);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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;
examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
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
/examples/ruby/spec/drivers/options_spec.rb
# 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();
/examples/javascript/test/capabilities/pageLoading.spec.js
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() } }
eager
WebDriver一直等到 DOMContentLoaded 事件触发并返回.
ChromeOptions chromeOptions = getDefaultChromeOptions(); chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER); WebDriver driver = new ChromeDriver(chromeOptions);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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;
examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
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
/examples/ruby/spec/drivers/options_spec.rb
# 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();
/examples/javascript/test/capabilities/pageLoading.spec.js
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() } }
none
WebDriver 仅等待初始页面已下载.
ChromeOptions chromeOptions = getDefaultChromeOptions(); chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE); WebDriver driver = new ChromeDriver(chromeOptions);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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()
examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
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
/examples/ruby/spec/drivers/options_spec.rb
# 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();
/examples/javascript/test/capabilities/pageLoading.spec.js
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
将返回操作系统的名称.
在基于云的供应者中, 设置 platformName
将在远程端设置操作系统.
ChromeOptions chromeOptions = getDefaultChromeOptions(); String platform = "OS X 10.6"; chromeOptions.setPlatformName(platform);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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'
examples/ruby/spec/drivers/options_spec.rb
# 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
acceptInsecureCerts
此功能检查在会话期间导航时 是否使用了过期的 (或) 无效的 TLS Certificate
.
如果将功能设置为 false
, 则页面浏览遇到任何域证书问题时, 将返回insecure certificate error . 如果设置为 true
, 则浏览器将信任无效证书.
默认情况下, 此功能将信任所有自签名证书. 设置后, acceptInsecureCerts
功能将在整个会话中生效.
ChromeOptions chromeOptions = getDefaultChromeOptions(); chromeOptions.setAcceptInsecureCerts(true);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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
examples/ruby/spec/drivers/options_spec.rb
# 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();
/examples/javascript/test/capabilities/pageLoading.spec.js
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(); }); });
timeouts
WebDriver session
具有一定的 session timeout
间隔, 在此间隔内, 用户可以控制执行脚本或从浏览器检索信息的行为.
每个会话超时都配置有不同 timeouts
的组合, 如下所述:
Script Timeout:
指定在当前浏览上下文中, 中断正在执行脚本的时机. WebDriver创建新会话时, 将设置默认的超时时间为 30,000 .
ChromeOptions chromeOptions = getDefaultChromeOptions(); Duration duration = Duration.of(5, ChronoUnit.SECONDS); chromeOptions.setScriptTimeout(duration);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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}
examples/ruby/spec/drivers/options_spec.rb
# 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
Page Load Timeout:
指定在当前浏览上下文中, 加载网页的时间间隔. WebDriver创建新会话时, 默认设置超时时间为 300,000 . 如果页面加载限制了给定 (或默认) 的时间范围, 则该脚本将被 TimeoutException 停止.
ChromeOptions chromeOptions = getDefaultChromeOptions(); Duration duration = Duration.of(5, ChronoUnit.SECONDS); chromeOptions.setPageLoadTimeout(duration);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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}
examples/ruby/spec/drivers/options_spec.rb
# 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
Implicit Wait Timeout
指定在定位元素时, 等待隐式元素定位策略的时间. WebDriver创建新会话时, 将设置默认超时时间为 0 .
ChromeOptions chromeOptions = getDefaultChromeOptions(); Duration duration = Duration.of(5, ChronoUnit.SECONDS); chromeOptions.setImplicitWaitTimeout(duration);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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}
examples/ruby/spec/drivers/options_spec.rb
# 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
unhandledPromptBehavior
指定当前会话 user prompt handler
的状态. 默认为 dismiss and notify state .
User Prompt Handler
这定义了在远端出现用户提示时必须采取的措施. 该行为由unhandledPromptBehavior
功能定义, 具有以下状态:
- dismiss
- accept
- dismiss and notify
- accept and notify
- ignore
ChromeOptions chromeOptions = getDefaultChromeOptions(); chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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
examples/ruby/spec/drivers/options_spec.rb
# 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
setWindowRect
ChromeOptions chromeOptions = getDefaultChromeOptions(); chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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
examples/ruby/spec/drivers/options_spec.rb
# 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
strictFileInteractability
新功能用于是否对 类型为文件的输入(input type=file) 元素进行严格的交互性检查. 默认关闭严格性检查, 在将 元素的Send Keys 方法作用于隐藏的文件上传时, 会有控制方面的行为区别.
ChromeOptions chromeOptions = getDefaultChromeOptions(); chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
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)
/examples/python/tests/drivers/test_options.py
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
examples/ruby/spec/drivers/options_spec.rb
# 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
proxy
代理服务器充当客户端和服务器之间的请求中介. 简述而言, 流量将通过代理服务器流向您请求的地址, 然后返回.
使用代理服务器用于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)
/examples/python/tests/drivers/test_options.py
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')
examples/ruby/spec/drivers/options_spec.rb
# 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() } }