这是本节的多页打印视图。
点击此处打印 .
返回本页常规视图 .
驱动会话 启动和停止会话, 用于打开和关闭浏览器.
创建会话 创建会话对应于W3C的命令 新建会话
会话是通过初始化新的驱动类对象自动创建的.
每种语言都允许使用来自这些类 (或等效类) 之一的参数创建会话:
本地驱动 启动本地驱动的首要唯一参数
包括在本地计算机上有关启动所需驱动服务的信息.
服务 对象仅适用于本地驱动,并提供有关浏览器驱动的信息
Java
Python
CSharp
Ruby
JavaScript
Kotlin WebDriver driver = new ChromeDriver ( chromeOptions );
examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
String name = chromeOptions . getBrowserName ();
Assertions . assertFalse ( name . isEmpty (), "Browser name should not be empty" );
}
@Test
public void setBrowserVersion () {
ChromeOptions chromeOptions = new ChromeOptions ();
String version = "latest" ;
chromeOptions . setBrowserVersion ( version );
Assertions . assertEquals ( version , chromeOptions . getBrowserVersion ());
}
@Test
public void setPlatformName () {
ChromeOptions chromeOptions = new ChromeOptions ();
String platform = "OS X 10.6" ;
chromeOptions . setPlatformName ( platform );
Assertions . assertEquals ( platform , chromeOptions . getPlatformName (). toString ());
}
@Test
public void setScriptTimeout () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 . page_load_strategy = 'normal'
examples/python/tests/drivers/test_options.py
Copy
Close
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_capabilities ():
options = webdriver . ChromeOptions ()
options . browser_version = 'stable'
options . platform_name = 'any'
options . accept_insecure_certs = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_script ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'script' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_page_load ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'pageLoad' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_implicit_wait ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'implicit' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_unhandled_prompt ():
options = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . strict_file_interactability = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_proxy ():
options = webdriver . ChromeOptions ()
options . proxy = Proxy ({ 'proxyType' : ProxyType . MANUAL , 'httpProxy' : 'http.proxy:1234' })
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
driver = new ChromeDriver ( options );
examples/dotnet/SeleniumDocs/BaseTest.cs
Copy
Close
using System ;
using System.Diagnostics ;
using System.IO ;
using System.Net ;
using System.Net.Http ;
using System.Net.Sockets ;
using System.Runtime.InteropServices ;
using System.Threading.Tasks ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace SeleniumDocs
{
public class BaseTest
{
protected IWebDriver driver ;
protected Uri GridUrl ;
private Process _webserverProcess ;
private const string ServerJarName = "selenium-server-4.25.0.jar" ;
private static readonly string BaseDirectory = AppContext . BaseDirectory ;
private const string RelativePathToGrid = "../../../../../" ;
private readonly string _examplesDirectory = Path . GetFullPath ( Path . Combine ( BaseDirectory , RelativePathToGrid ));
[TestCleanup]
public void Cleanup ()
{
driver ?. Quit ();
if ( _webserverProcess != null )
{
StopServer ();
}
}
protected void StartDriver ( string browserVersion = "stable" )
{
ChromeOptions options = new ChromeOptions
{
BrowserVersion = browserVersion
};
driver = new ChromeDriver ( options );
}
protected async Task StartServer ()
{
if ( _webserverProcess == null || _webserverProcess . HasExited )
{
_webserverProcess = new Process ();
_webserverProcess . StartInfo . FileName =
RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) ? "java.exe" : "java" ;
string port = GetFreeTcpPort (). ToString ();
GridUrl = new Uri ( "http://localhost:" + port + "/wd/hub" );
_webserverProcess . StartInfo . Arguments = " -jar " + ServerJarName +
" standalone --port " + port +
" --selenium-manager true --enable-managed-downloads true" ;
_webserverProcess . StartInfo . WorkingDirectory = _examplesDirectory ;
_webserverProcess . Start ();
await EnsureGridIsRunningAsync ();
}
}
private void StopServer ()
{
if ( _webserverProcess != null && ! _webserverProcess . HasExited )
{
_webserverProcess . Kill ();
_webserverProcess . Dispose ();
_webserverProcess = null ;
}
}
private static int GetFreeTcpPort ()
{
TcpListener l = new TcpListener ( IPAddress . Loopback , 0 );
l . Start ();
int port = (( IPEndPoint ) l . LocalEndpoint ). Port ;
l . Stop ();
return port ;
}
private async Task EnsureGridIsRunningAsync ()
{
DateTime timeout = DateTime . Now . Add ( TimeSpan . FromSeconds ( 30 ));
bool isRunning = false ;
HttpClient client = new HttpClient ();
while (! isRunning && DateTime . Now < timeout )
{
try
{
HttpResponseMessage response = await client . GetAsync ( GridUrl + "/status" );
if ( response . IsSuccessStatusCode )
{
isRunning = true ;
}
else
{
await Task . Delay ( 500 );
}
}
catch ( HttpRequestException )
{
await Task . Delay ( 500 );
}
}
if (! isRunning )
{
throw new TimeoutException ( "Could not confirm the remote selenium server is running within 30 seconds" );
}
}
}
}
driver . get ( 'https://www.google.com' )
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
. forBrowser ( Browser . CHROME )
. setChromeService ( service )
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
examples/javascript/test/drivers/service.spec.js
Copy
Close
const Chrome = require ( 'selenium-webdriver/chrome' );
const { Browser , Builder } = require ( "selenium-webdriver" );
const { getBinaryPaths } = require ( "selenium-webdriver/common/driverFinder" );
const options = new Chrome . Options ();
describe ( 'Service Test' , function () {
it ( 'Default service' , async function () {
let service = new Chrome . ServiceBuilder ()
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeService ( service )
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
await driver . quit ();
});
it ( 'Set Driver Location' , async function () {
let options = new Chrome . Options ();
options . setBrowserVersion ( "stable" )
let paths = getBinaryPaths ( options )
let driverPath = paths . driverPath ;
let browserPath = paths . browserPath ;
options . setChromeBinaryPath ( browserPath )
let service = new Chrome . ServiceBuilder (). setPath ( driverPath )
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options )
. setChromeService ( service )
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
await driver . quit ();
});
it ( 'Set port' , async function () {
let service = new Chrome . ServiceBuilder (). setPort ( 1234 )
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeService ( service )
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
await driver . quit ();
});
});
远程驱动 用于启动远程驱动的首要唯一参数包括有关在何处执行代码的信息.
请浏览 远程驱动章节 中的详细信息
退出会话 退出会话对应于W3C的命令 删除会话 .
重要提示: quit
方法与 close
方法不同,
建议始终使用 quit
来结束会话
Java
Python
CSharp
Ruby
JavaScript
Kotlin examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java
Copy
Close
package dev.selenium.getting_started ;
import org.openqa.selenium.By ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeDriver ;
import java.time.Duration ;
public class FirstScript {
public static void main ( String [] args ) {
WebDriver driver = new ChromeDriver ();
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" );
driver . getTitle ();
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ));
WebElement textBox = driver . findElement ( By . name ( "my-text" ));
WebElement submitButton = driver . findElement ( By . cssSelector ( "button" ));
textBox . sendKeys ( "Selenium" );
submitButton . click ();
WebElement message = driver . findElement ( By . id ( "message" ));
message . getText ();
driver . quit ();
}
}
examples/python/tests/drivers/test_options.py
Copy
Close
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_capabilities ():
options = webdriver . ChromeOptions ()
options . browser_version = 'stable'
options . platform_name = 'any'
options . accept_insecure_certs = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_script ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'script' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_page_load ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'pageLoad' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_implicit_wait ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'implicit' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_unhandled_prompt ():
options = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . strict_file_interactability = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_proxy ():
options = webdriver . ChromeOptions ()
options . proxy = Proxy ({ 'proxyType' : ProxyType . MANUAL , 'httpProxy' : 'http.proxy:1234' })
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs
Copy
Close
using System ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace SeleniumDocs.GettingStarted ;
public static class FirstScript
{
public static void Main ()
{
IWebDriver driver = new ChromeDriver ();
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/selenium/web/web-form.html" );
var title = driver . Title ;
driver . Manage (). Timeouts (). ImplicitWait = TimeSpan . FromMilliseconds ( 500 );
var textBox = driver . FindElement ( By . Name ( "my-text" ));
var submitButton = driver . FindElement ( By . TagName ( "button" ));
textBox . SendKeys ( "Selenium" );
submitButton . Click ();
var message = driver . FindElement ( By . Id ( "message" ));
var value = message . Text ;
driver . Quit ();
}
}
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
examples/javascript/test/getting_started/firstScript.spec.js
Copy
Close
const { By , Builder , Browser } = require ( 'selenium-webdriver' );
const { suite } = require ( 'selenium-webdriver/testing' );
const assert = require ( "assert" );
suite ( function ( env ) {
describe ( 'First script' , function () {
let driver ;
before ( async function () {
driver = await new Builder (). forBrowser ( 'chrome' ). build ();
});
after ( async () => await driver . quit ());
it ( 'First Selenium script' , async function () {
await driver . get ( 'https://www.selenium.dev/selenium/web/web-form.html' );
let title = await driver . getTitle ();
assert . equal ( "Web form" , title );
await driver . manage (). setTimeouts ({ implicit : 500 });
let textBox = await driver . findElement ( By . name ( 'my-text' ));
let submitButton = await driver . findElement ( By . css ( 'button' ));
await textBox . sendKeys ( 'Selenium' );
await submitButton . click ();
let message = await driver . findElement ( By . id ( 'message' ));
let value = await message . getText ();
assert . equal ( "Received!" , value );
});
});
}, { browsers : [ Browser . CHROME , Browser . FIREFOX ]});
examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt
Copy
Close
package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance ( TestInstance . Lifecycle . PER_CLASS )
class FirstScriptTest {
private lateinit var driver : WebDriver
@Test
fun eightComponents () {
driver = ChromeDriver ()
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
val title = driver . title
assertEquals ( "Web form" , title )
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ))
var textBox = driver . findElement ( By . name ( "my-text" ))
val submitButton = driver . findElement ( By . cssSelector ( "button" ))
textBox . sendKeys ( "Selenium" )
submitButton . click ()
val message = driver . findElement ( By . id ( "message" ))
val value = message . getText ()
assertEquals ( "Received!" , value )
driver . quit ()
}
}
1 - 浏览器选项 这些capabilities用于所有浏览器.
在 Selenium 3 中, capabilities是借助"Desired Capabilities"类定义于会话中的.
从 Selenium 4 开始, 您必须使用浏览器选项类.
对于远程驱动程序会话, 浏览器选项实例是必需的, 因为它确定将使用哪个浏览器.
这些选项在 Capabilities 的 w3c 规范中进行了描述.
每个浏览器都有 自定义选项 , 是规范定义之外的内容.
browserName 默认情况下,使用 Options 类实例时会设置浏览器名称.
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
String name = chromeOptions . getBrowserName ();
examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
String name = chromeOptions . getBrowserName ();
Assertions . assertFalse ( name . isEmpty (), "Browser name should not be empty" );
}
@Test
public void setBrowserVersion () {
ChromeOptions chromeOptions = new ChromeOptions ();
String version = "latest" ;
chromeOptions . setBrowserVersion ( version );
Assertions . assertEquals ( version , chromeOptions . getBrowserVersion ());
}
@Test
public void setPlatformName () {
ChromeOptions chromeOptions = new ChromeOptions ();
String platform = "OS X 10.6" ;
chromeOptions . setPlatformName ( platform );
Assertions . assertEquals ( platform , chromeOptions . getPlatformName (). toString ());
}
@Test
public void setScriptTimeout () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 . set_window_rect = True # Full support in Firefox
driver = webdriver . Firefox ( options = options )
examples/python/tests/drivers/test_options.py
Copy
Close
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_capabilities ():
options = webdriver . ChromeOptions ()
options . browser_version = 'stable'
options . platform_name = 'any'
options . accept_insecure_certs = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_script ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'script' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_page_load ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'pageLoad' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_implicit_wait ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'implicit' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_unhandled_prompt ():
options = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . strict_file_interactability = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_proxy ():
options = webdriver . ChromeOptions ()
options . proxy = Proxy ({ 'proxyType' : ProxyType . MANUAL , 'httpProxy' : 'http.proxy:1234' })
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
options . page_load_strategy = :normal
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
browserVersion 此功能是可选的,用于在远程端设置可用的浏览器版本.
在最新版本的 Selenium 中,如果在系统上找不到该版本,
它将被 Selenium Manager 自动下载
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
String version = "latest" ;
chromeOptions . setBrowserVersion ( version );
examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
String name = chromeOptions . getBrowserName ();
Assertions . assertFalse ( name . isEmpty (), "Browser name should not be empty" );
}
@Test
public void setBrowserVersion () {
ChromeOptions chromeOptions = new ChromeOptions ();
String version = "latest" ;
chromeOptions . setBrowserVersion ( version );
Assertions . assertEquals ( version , chromeOptions . getBrowserVersion ());
}
@Test
public void setPlatformName () {
ChromeOptions chromeOptions = new ChromeOptions ();
String platform = "OS X 10.6" ;
chromeOptions . setPlatformName ( platform );
Assertions . assertEquals ( platform , chromeOptions . getPlatformName (). toString ());
}
@Test
public void setScriptTimeout () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
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 . ChromeOptions ()
options . strict_file_interactability = True
driver = webdriver . Chrome ( options = options )
examples/python/tests/drivers/test_options.py
Copy
Close
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_capabilities ():
options = webdriver . ChromeOptions ()
options . browser_version = 'stable'
options . platform_name = 'any'
options . accept_insecure_certs = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_script ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'script' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_page_load ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'pageLoad' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_timeouts_implicit_wait ():
options = webdriver . ChromeOptions ()
options . timeouts = { 'implicit' : 5000 }
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_unhandled_prompt ():
options = webdriver . ChromeOptions ()
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 = webdriver . ChromeOptions ()
options . strict_file_interactability = True
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
def test_proxy ():
options = webdriver . ChromeOptions ()
options . proxy = Proxy ({ 'proxyType' : ProxyType . MANUAL , 'httpProxy' : 'http.proxy:1234' })
driver = webdriver . Chrome ( options = options )
driver . get ( "https://www.selenium.dev/" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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
事件触发并返回.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace pageLoadStrategy {
class pageLoadStrategy {
public static void Main ( string [] args ) {
var chromeOptions = new ChromeOptions ();
chromeOptions . PageLoadStrategy = PageLoadStrategy . Normal ;
IWebDriver driver = new ChromeDriver ( chromeOptions );
try {
driver . Navigate (). GoToUrl ( "https://example.com" );
} finally {
driver . Quit ();
}
}
}
}
options . page_load_strategy = :normal
/examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
it ( 'Navigate using normal page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'normal' ))
. build ();
await driver . get ( 'https://www.google.com' );
/examples/javascript/test/capabilities/pageLoading.spec.js
Copy
Close
const Chrome = require ( 'selenium-webdriver/chrome' );
const { suite } = require ( 'selenium-webdriver/testing' );
const { Browser } = require ( "selenium-webdriver" );
const options = new Chrome . Options ()
suite ( function ( env ) {
describe ( 'Page loading strategies' , function () {
it ( 'Navigate using eager page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'eager' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using none page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'none' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using normal page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'normal' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
});
}, { browsers : [ Browser . CHROME , Browser . FIREFOX ]});
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
事件触发并返回.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace pageLoadStrategy {
class pageLoadStrategy {
public static void Main ( string [] args ) {
var chromeOptions = new ChromeOptions ();
chromeOptions . PageLoadStrategy = PageLoadStrategy . Eager ;
IWebDriver driver = new ChromeDriver ( chromeOptions );
try {
driver . Navigate (). GoToUrl ( "https://example.com" );
} finally {
driver . Quit ();
}
}
}
}
options . page_load_strategy = :eager
/examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
it ( 'Navigate using eager page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'eager' ))
. build ();
await driver . get ( 'https://www.google.com' );
/examples/javascript/test/capabilities/pageLoading.spec.js
Copy
Close
const Chrome = require ( 'selenium-webdriver/chrome' );
const { suite } = require ( 'selenium-webdriver/testing' );
const { Browser } = require ( "selenium-webdriver" );
const options = new Chrome . Options ()
suite ( function ( env ) {
describe ( 'Page loading strategies' , function () {
it ( 'Navigate using eager page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'eager' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using none page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'none' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using normal page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'normal' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
});
}, { browsers : [ Browser . CHROME , Browser . FIREFOX ]});
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 仅等待初始页面已下载.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace pageLoadStrategy {
class pageLoadStrategy {
public static void Main ( string [] args ) {
var chromeOptions = new ChromeOptions ();
chromeOptions . PageLoadStrategy = PageLoadStrategy . None ;
IWebDriver driver = new ChromeDriver ( chromeOptions );
try {
driver . Navigate (). GoToUrl ( "https://example.com" );
} finally {
driver . Quit ();
}
}
}
}
options . page_load_strategy = :none
/examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
it ( 'Navigate using none page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'none' ))
. build ();
await driver . get ( 'https://www.google.com' );
/examples/javascript/test/capabilities/pageLoading.spec.js
Copy
Close
const Chrome = require ( 'selenium-webdriver/chrome' );
const { suite } = require ( 'selenium-webdriver/testing' );
const { Browser } = require ( "selenium-webdriver" );
const options = new Chrome . Options ()
suite ( function ( env ) {
describe ( 'Page loading strategies' , function () {
it ( 'Navigate using eager page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'eager' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using none page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'none' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using normal page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'normal' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
});
}, { browsers : [ Browser . CHROME , Browser . FIREFOX ]});
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
将在远程端设置操作系统.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
acceptInsecureCerts 此功能检查在会话期间导航时
是否使用了过期的 (或) 无效的 TLS Certificate
.
如果将功能设置为 false
,
则页面浏览遇到任何域证书问题时,
将返回insecure certificate error .
如果设置为 true
, 则浏览器将信任无效证书.
默认情况下, 此功能将信任所有自签名证书.
设置后, acceptInsecureCerts
功能将在整个会话中生效.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
}, { browsers : [ Browser . CHROME , Browser . FIREFOX ]});
/examples/javascript/test/capabilities/pageLoading.spec.js
Copy
Close
const Chrome = require ( 'selenium-webdriver/chrome' );
const { suite } = require ( 'selenium-webdriver/testing' );
const { Browser } = require ( "selenium-webdriver" );
const options = new Chrome . Options ()
suite ( function ( env ) {
describe ( 'Page loading strategies' , function () {
it ( 'Navigate using eager page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'eager' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using none page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'none' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
it ( 'Navigate using normal page loading strategy' , async function () {
let driver = await env
. builder ()
. setChromeOptions ( options . setPageLoadStrategy ( 'normal' ))
. build ();
await driver . get ( 'https://www.google.com' );
await driver . quit ();
});
});
}, { browsers : [ Browser . CHROME , Browser . FIREFOX ]});
timeouts WebDriver session
具有一定的 session timeout
间隔,
在此间隔内, 用户可以控制执行脚本或从浏览器检索信息的行为.
每个会话超时都配置有不同 timeouts
的组合,
如下所述:
Script Timeout: 指定在当前浏览上下文中, 中断正在执行脚本的时机.
WebDriver创建新会话时,
将设置默认的超时时间为 30,000 .
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
driver . get ( "http://www.google.com" )
driver . quit ()
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
Page Load Timeout: 指定在当前浏览上下文中, 加载网页的时间间隔.
WebDriver创建新会话时,
默认设置超时时间为 300,000 .
如果页面加载限制了给定 (或默认) 的时间范围,
则该脚本将被 TimeoutException 停止.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
Implicit Wait Timeout 指定在定位元素时, 等待隐式元素定位策略的时间.
WebDriver创建新会话时,
将设置默认超时时间为 0 .
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
setWindowRect 用于所有支持 调整大小和重新定位
命令 的远程终端.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
strictFileInteractability 新功能用于是否对 类型为文件的输入(input type=file) 元素进行严格的交互性检查.
默认关闭严格性检查,
在将 元素的Send Keys 方法作用于隐藏的文件上传时,
会有控制方面的行为区别.
Java
Python
CSharp
Ruby
JavaScript
Kotlin /examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.PageLoadStrategy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class OptionsTest extends BaseTest {
@Test
public void setPageLoadStrategyNormal () {
ChromeOptions chromeOptions = new ChromeOptions ();
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 = new ChromeOptions ();
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 = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
try {
// Navigate to Url
driver . get ( "https://selenium.dev" );
} finally {
driver . quit ();
}
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
driver . quit
end
end
end
proxy 代理服务器充当客户端和服务器之间的请求中介.
简述而言, 流量将通过代理服务器流向您请求的地址, 然后返回.
使用代理服务器用于Selenium的自动化脚本,
可能对以下方面有益:
捕获网络流量 模拟网站后端响应 在复杂的网络拓扑结构或严格的公司限制/政策下访问目标站点. 如果您在公司环境中,
并且浏览器无法连接到URL,
则最有可能是因为环境, 需要借助代理进行访问.
Selenium WebDriver提供了如下设置代理的方法
Move Code
Java
Python
CSharp
Ruby
JavaScript
Kotlin 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 ();
}
}
/examples/python/tests/drivers/test_options.py
Copy
Close
from selenium import webdriver
def test_page_load_strategy_normal ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_eager ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
def test_page_load_strategy_none ():
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
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/" );
}
}
examples/ruby/spec/drivers/options_spec.rb
Copy
Close
# 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 ) }
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ( 'https://www.google.com' )
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 ()
}
}
3 - 驱动服务类 服务类用于管理驱动程序的启动和停止.
它们不能与远程 WebDriver 会话一起使用.
服务类允许您指定有关驱动程序的信息,
诸如位置和要使用的端口.
它们还允许您指定传递哪些参数到命令行.
大多数有用的参数都与日志记录有关.
默认服务实例 使用默认服务实例启动驱动程序:
Java
Python
CSharp
Ruby
JavaScript
Kotlin import org.openqa.selenium.remote.service.DriverService ;
examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java
Copy
Close
package dev.selenium.drivers ;
import com.google.common.io.ByteStreams ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.time.Duration ;
import org.junit.jupiter.api.AfterEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.chrome.ChromeDriver ;
import org.openqa.selenium.chrome.ChromeDriverLogLevel ;
import org.openqa.selenium.chrome.ChromeDriverService ;
import org.openqa.selenium.chromium.ChromiumDriverLogLevel ;
import org.openqa.selenium.firefox.FirefoxDriver ;
import org.openqa.selenium.firefox.GeckoDriverService ;
import org.openqa.selenium.remote.service.DriverService ;
public class ServiceTest extends BaseTest {
private final File logLocation = new File ( "driver.log" );
private final File driverLocation = new File ( System . getenv ( "CHROMEWEBDRIVER" ) + "/chromedriver" );
@AfterEach
public void quit () {
driver . quit ();
}
@Test
public void defaultService () {
ChromeDriverService service = new ChromeDriverService . Builder (). build ();
driver = new ChromeDriver ( service );
}
@Test
public void setDriverLocation () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. usingDriverExecutable ( driverLocation )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void setPort () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. usingPort ( 1234 )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToFileWithLogOutput () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. withLogFile ( logLocation )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToFileProperty () {
System . setProperty ( ChromeDriverService . CHROME_DRIVER_LOG_PROPERTY ,
logLocation . getAbsolutePath ());
driver = new ChromeDriver ();
}
@Test
public void logsToStdoutWithLogOutput () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. withLogOutput ( System . out )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToStdoutProperty () {
System . setProperty ( ChromeDriverService . CHROME_DRIVER_LOG_PROPERTY ,
logLocation . getAbsolutePath ());
driver = new ChromeDriver ();
}
}
Selenium v4.11
from selenium.webdriver.chrome.service import Service as ChromeService
examples/python/tests/drivers/test_service.py
Copy
Close
import os
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
def test_basic_service ():
service = ChromeService ()
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_driver_location ():
driver_path = os . getenv ( 'CHROMEWEBDRIVER' ) + 'chromedriver'
service = ChromeService ( executable_path = driver_path )
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_driver_port ():
service = ChromeService ( port = 1234 )
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_log_to_file ():
log_path = 'chromedriver.log'
service = ChromeService ( log_path = log_path )
driver = webdriver . Chrome ( service = service )
with open ( log_path , 'r' ) as fp :
assert "Starting ChromeDriver" in fp . readline ()
driver . quit ()
[TestMethod]
public void BasicService ()
examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs
Copy
Close
using System ;
using System.IO ;
using System.Linq ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class ServiceTest : BaseTest
{
[TestMethod]
public void BasicService ()
{
var service = FirefoxDriverService . CreateDefaultService ();
driver = new FirefoxDriver ( service );
}
[TestMethod]
public void DriverLocation ()
{
var path = Environment . GetEnvironmentVariable ( "GECKOWEBDRIVER" ) + "/geckodriver" ;
var service = ChromeDriverService . CreateDefaultService ( path );
driver = new ChromeDriver ( service );
}
[TestMethod]
public void DriverPort ()
{
var path = Environment . GetEnvironmentVariable ( "GECKOWEBDRIVER" ) + "/geckodriver" ;
var service = FirefoxDriverService . CreateDefaultService ();
service . Port = 1234 ;
driver = new FirefoxDriver ( service );
}
[TestMethod]
public void LogsToFile ()
{
var service = ChromeDriverService . CreateDefaultService ();
var file = Path . Combine ( AppDomain . CurrentDomain . BaseDirectory , "../../../selenium.log" );
service . LogPath = file ;
driver = new ChromeDriver ( service );
driver . Url = "https://www.selenium.dev/" ;
var lines = File . ReadLines ( file );
Assert . IsTrue ( lines . First (). Contains ( "Starting ChromeDriver" ));
}
}
}
examples/ruby/spec/drivers/service_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
RSpec . describe 'Service' do
let ( :file_name ) { File . expand_path ( 'driver.log' ) }
let ( :driver_path ) { " #{ ENV [ 'CHROMEWEBDRIVER' ] } /chromedriver" }
after { FileUtils . rm_f ( file_name ) }
it 'has default service' do
service = Selenium :: WebDriver :: Service . chrome
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'specifies driver location' do
service = Selenium :: WebDriver :: Service . chrome
service . executable_path = driver_path
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'specifies driver port' do
service = Selenium :: WebDriver :: Service . chrome
service . port = 1234
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'logs to file' do
service = Selenium :: WebDriver :: Service . chrome
service . log = file_name
@driver = Selenium :: WebDriver . for :chrome , service : service
expect ( File . readlines ( file_name ) . size ) . to eq 4
end
it 'logs to stdout' do
service = Selenium :: WebDriver :: Service . chrome
service . log = $stdout
expect {
@driver = Selenium :: WebDriver . for :chrome , service : service
} . to output ( /Starting ChromeDriver/ ) . to_stdout_from_any_process
end
end
驱动程序位置 注意: 如果您使用的是 Selenium 4.6 或更高版本,
则无需设置驱动程序位置.
如果您无法更新 Selenium 或有高阶用法需求,
以下是指定驱动程序位置的方法:
Java
Python
CSharp
Ruby
JavaScript
Kotlin examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java
Copy
Close
package dev.selenium.drivers ;
import com.google.common.io.ByteStreams ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.time.Duration ;
import org.junit.jupiter.api.AfterEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.chrome.ChromeDriver ;
import org.openqa.selenium.chrome.ChromeDriverLogLevel ;
import org.openqa.selenium.chrome.ChromeDriverService ;
import org.openqa.selenium.chromium.ChromiumDriverLogLevel ;
import org.openqa.selenium.firefox.FirefoxDriver ;
import org.openqa.selenium.firefox.GeckoDriverService ;
import org.openqa.selenium.remote.service.DriverService ;
public class ServiceTest extends BaseTest {
private final File logLocation = new File ( "driver.log" );
private final File driverLocation = new File ( System . getenv ( "CHROMEWEBDRIVER" ) + "/chromedriver" );
@AfterEach
public void quit () {
driver . quit ();
}
@Test
public void defaultService () {
ChromeDriverService service = new ChromeDriverService . Builder (). build ();
driver = new ChromeDriver ( service );
}
@Test
public void setDriverLocation () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. usingDriverExecutable ( driverLocation )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void setPort () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. usingPort ( 1234 )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToFileWithLogOutput () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. withLogFile ( logLocation )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToFileProperty () {
System . setProperty ( ChromeDriverService . CHROME_DRIVER_LOG_PROPERTY ,
logLocation . getAbsolutePath ());
driver = new ChromeDriver ();
}
@Test
public void logsToStdoutWithLogOutput () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. withLogOutput ( System . out )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToStdoutProperty () {
System . setProperty ( ChromeDriverService . CHROME_DRIVER_LOG_PROPERTY ,
logLocation . getAbsolutePath ());
driver = new ChromeDriver ();
}
}
Selenium v4.11
driver_path = os . getenv ( 'CHROMEWEBDRIVER' ) + 'chromedriver'
examples/python/tests/drivers/test_service.py
Copy
Close
import os
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
def test_basic_service ():
service = ChromeService ()
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_driver_location ():
driver_path = os . getenv ( 'CHROMEWEBDRIVER' ) + 'chromedriver'
service = ChromeService ( executable_path = driver_path )
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_driver_port ():
service = ChromeService ( port = 1234 )
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_log_to_file ():
log_path = 'chromedriver.log'
service = ChromeService ( log_path = log_path )
driver = webdriver . Chrome ( service = service )
with open ( log_path , 'r' ) as fp :
assert "Starting ChromeDriver" in fp . readline ()
driver . quit ()
Selenium v4.9
examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs
Copy
Close
using System ;
using System.IO ;
using System.Linq ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class ServiceTest : BaseTest
{
[TestMethod]
public void BasicService ()
{
var service = FirefoxDriverService . CreateDefaultService ();
driver = new FirefoxDriver ( service );
}
[TestMethod]
public void DriverLocation ()
{
var path = Environment . GetEnvironmentVariable ( "GECKOWEBDRIVER" ) + "/geckodriver" ;
var service = ChromeDriverService . CreateDefaultService ( path );
driver = new ChromeDriver ( service );
}
[TestMethod]
public void DriverPort ()
{
var path = Environment . GetEnvironmentVariable ( "GECKOWEBDRIVER" ) + "/geckodriver" ;
var service = FirefoxDriverService . CreateDefaultService ();
service . Port = 1234 ;
driver = new FirefoxDriver ( service );
}
[TestMethod]
public void LogsToFile ()
{
var service = ChromeDriverService . CreateDefaultService ();
var file = Path . Combine ( AppDomain . CurrentDomain . BaseDirectory , "../../../selenium.log" );
service . LogPath = file ;
driver = new ChromeDriver ( service );
driver . Url = "https://www.selenium.dev/" ;
var lines = File . ReadLines ( file );
Assert . IsTrue ( lines . First (). Contains ( "Starting ChromeDriver" ));
}
}
}
Selenium v4.8
examples/ruby/spec/drivers/service_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
RSpec . describe 'Service' do
let ( :file_name ) { File . expand_path ( 'driver.log' ) }
let ( :driver_path ) { " #{ ENV [ 'CHROMEWEBDRIVER' ] } /chromedriver" }
after { FileUtils . rm_f ( file_name ) }
it 'has default service' do
service = Selenium :: WebDriver :: Service . chrome
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'specifies driver location' do
service = Selenium :: WebDriver :: Service . chrome
service . executable_path = driver_path
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'specifies driver port' do
service = Selenium :: WebDriver :: Service . chrome
service . port = 1234
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'logs to file' do
service = Selenium :: WebDriver :: Service . chrome
service . log = file_name
@driver = Selenium :: WebDriver . for :chrome , service : service
expect ( File . readlines ( file_name ) . size ) . to eq 4
end
it 'logs to stdout' do
service = Selenium :: WebDriver :: Service . chrome
service . log = $stdout
expect {
@driver = Selenium :: WebDriver . for :chrome , service : service
} . to output ( /Starting ChromeDriver/ ) . to_stdout_from_any_process
end
end
驱动程序端口 如果希望驱动程序在特定端口上运行,
您可以在启动时指定端口号, 如下所示:
Java
Python
CSharp
Ruby
JavaScript
Kotlin public void setDriverLocation () {
examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java
Copy
Close
package dev.selenium.drivers ;
import com.google.common.io.ByteStreams ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.time.Duration ;
import org.junit.jupiter.api.AfterEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.chrome.ChromeDriver ;
import org.openqa.selenium.chrome.ChromeDriverLogLevel ;
import org.openqa.selenium.chrome.ChromeDriverService ;
import org.openqa.selenium.chromium.ChromiumDriverLogLevel ;
import org.openqa.selenium.firefox.FirefoxDriver ;
import org.openqa.selenium.firefox.GeckoDriverService ;
import org.openqa.selenium.remote.service.DriverService ;
public class ServiceTest extends BaseTest {
private final File logLocation = new File ( "driver.log" );
private final File driverLocation = new File ( System . getenv ( "CHROMEWEBDRIVER" ) + "/chromedriver" );
@AfterEach
public void quit () {
driver . quit ();
}
@Test
public void defaultService () {
ChromeDriverService service = new ChromeDriverService . Builder (). build ();
driver = new ChromeDriver ( service );
}
@Test
public void setDriverLocation () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. usingDriverExecutable ( driverLocation )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void setPort () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. usingPort ( 1234 )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToFileWithLogOutput () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. withLogFile ( logLocation )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToFileProperty () {
System . setProperty ( ChromeDriverService . CHROME_DRIVER_LOG_PROPERTY ,
logLocation . getAbsolutePath ());
driver = new ChromeDriver ();
}
@Test
public void logsToStdoutWithLogOutput () {
ChromeDriverService service = new ChromeDriverService . Builder ()
. withLogOutput ( System . out )
. build ();
driver = new ChromeDriver ( service );
}
@Test
public void logsToStdoutProperty () {
System . setProperty ( ChromeDriverService . CHROME_DRIVER_LOG_PROPERTY ,
logLocation . getAbsolutePath ());
driver = new ChromeDriver ();
}
}
Selenium v4.11
examples/python/tests/drivers/test_service.py
Copy
Close
import os
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
def test_basic_service ():
service = ChromeService ()
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_driver_location ():
driver_path = os . getenv ( 'CHROMEWEBDRIVER' ) + 'chromedriver'
service = ChromeService ( executable_path = driver_path )
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_driver_port ():
service = ChromeService ( port = 1234 )
driver = webdriver . Chrome ( service = service )
driver . quit ()
def test_log_to_file ():
log_path = 'chromedriver.log'
service = ChromeService ( log_path = log_path )
driver = webdriver . Chrome ( service = service )
with open ( log_path , 'r' ) as fp :
assert "Starting ChromeDriver" in fp . readline ()
driver . quit ()
examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs
Copy
Close
using System ;
using System.IO ;
using System.Linq ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class ServiceTest : BaseTest
{
[TestMethod]
public void BasicService ()
{
var service = FirefoxDriverService . CreateDefaultService ();
driver = new FirefoxDriver ( service );
}
[TestMethod]
public void DriverLocation ()
{
var path = Environment . GetEnvironmentVariable ( "GECKOWEBDRIVER" ) + "/geckodriver" ;
var service = ChromeDriverService . CreateDefaultService ( path );
driver = new ChromeDriver ( service );
}
[TestMethod]
public void DriverPort ()
{
var path = Environment . GetEnvironmentVariable ( "GECKOWEBDRIVER" ) + "/geckodriver" ;
var service = FirefoxDriverService . CreateDefaultService ();
service . Port = 1234 ;
driver = new FirefoxDriver ( service );
}
[TestMethod]
public void LogsToFile ()
{
var service = ChromeDriverService . CreateDefaultService ();
var file = Path . Combine ( AppDomain . CurrentDomain . BaseDirectory , "../../../selenium.log" );
service . LogPath = file ;
driver = new ChromeDriver ( service );
driver . Url = "https://www.selenium.dev/" ;
var lines = File . ReadLines ( file );
Assert . IsTrue ( lines . First (). Contains ( "Starting ChromeDriver" ));
}
}
}
Selenium v4.8
examples/ruby/spec/drivers/service_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
RSpec . describe 'Service' do
let ( :file_name ) { File . expand_path ( 'driver.log' ) }
let ( :driver_path ) { " #{ ENV [ 'CHROMEWEBDRIVER' ] } /chromedriver" }
after { FileUtils . rm_f ( file_name ) }
it 'has default service' do
service = Selenium :: WebDriver :: Service . chrome
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'specifies driver location' do
service = Selenium :: WebDriver :: Service . chrome
service . executable_path = driver_path
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'specifies driver port' do
service = Selenium :: WebDriver :: Service . chrome
service . port = 1234
@driver = Selenium :: WebDriver . for :chrome , service : service
end
it 'logs to file' do
service = Selenium :: WebDriver :: Service . chrome
service . log = file_name
@driver = Selenium :: WebDriver . for :chrome , service : service
expect ( File . readlines ( file_name ) . size ) . to eq 4
end
it 'logs to stdout' do
service = Selenium :: WebDriver :: Service . chrome
service . log = $stdout
expect {
@driver = Selenium :: WebDriver . for :chrome , service : service
} . to output ( /Starting ChromeDriver/ ) . to_stdout_from_any_process
end
end
日志 日志记录功能因浏览器而异.
大多数浏览器都允许您指定日志的位置和级别.
请查看相应的浏览器页面:
4 - 远程WebDriver 如果远程计算机上正在运行 Selenium Grid ,
则 Selenium 允许您自动化远程计算机上的浏览器.
执行代码的计算机称为客户端计算机,
具有浏览器和驱动程序的计算机称为远程计算机,
有时也称为终端节点.
要将 Selenium 测试指向到远程计算机,
您需要使用 Remote WebDriver 类并传递包含该机器上网格端口的URL.
请参阅网格文档, 了解配置网格的全部方式.
基本样例 驱动程序需要知道在远程计算机上向何处发送命令,
以及启动哪个浏览器.
所以地址和选项实例都是必需的.
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver = new RemoteWebDriver ( gridUrl , options );
}
examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
assert "localhost" in driver . command_executor . _url
driver . quit ()
examples/python/tests/drivers/test_remote_webdriver.py
Copy
Close
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
def test_start_remote ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
assert "localhost" in driver . command_executor . _url
driver . quit ()
def test_uploads ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
driver . get ( "https://the-internet.herokuapp.com/upload" )
upload_file = os . path . abspath (
os . path . join ( os . path . dirname ( __file__ ), ".." , "selenium-snapshot.png" ))
driver . file_detector = LocalFileDetector ()
file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" )
file_input . send_keys ( upload_file )
driver . find_element ( By . ID , "file-submit" ) . click ()
file_name_element = driver . find_element ( By . ID , "uploaded-files" )
file_name = file_name_element . text
assert file_name == "selenium-snapshot.png"
def test_downloads ( server , temp_dir ):
options = webdriver . ChromeOptions ()
options . enable_downloads = True
driver = webdriver . Remote ( command_executor = server , options = options )
file_names = [ "file_1.txt" , "file_2.jpg" ]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( By . ID , "file-1" ) . click ()
driver . find_element ( By . ID , "file-2" ) . click ()
WebDriverWait ( driver , 3 ) . until ( lambda d : "file_2.jpg" in d . get_downloadable_files ())
files = driver . get_downloadable_files ()
assert files == file_names
downloadable_file = files [ 0 ]
target_directory = temp_dir
driver . download_file ( downloadable_file , target_directory )
target_file = os . path . join ( target_directory , downloadable_file )
with open ( target_file , "r" ) as file :
assert "Hello, World!" in file . read ()
driver . delete_downloadable_files ()
assert not driver . get_downloadable_files ()
driver = new RemoteWebDriver ( GridUrl , options );
examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
Copy
Close
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Threading.Tasks ;
using Microsoft.IdentityModel.Tokens ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
using OpenQA.Selenium.Remote ;
using OpenQA.Selenium.Support.UI ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup ()
{
await StartServer ();
}
[TestMethod]
public void RunRemote ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
Assert . IsInstanceOfType ( driver , typeof ( IHasDownloads ));
}
[TestMethod]
public void Uploads ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://the-internet.herokuapp.com/upload" ;
string baseDirectory = AppContext . BaseDirectory ;
string relativePath = "../../../TestSupport/selenium-snapshot.png" ;
string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath ));
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" ));
Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text );
}
[TestMethod]
public void Downloads ()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
driver . FindElement ( By . Id ( "file-1" )). Click ();
driver . FindElement ( By . Id ( "file-2" )). Click ();
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 3 ));
wait . Until ( d => (( RemoteWebDriver ) d ). GetDownloadableFiles (). Contains ( "file_2.jpg" ));
List < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
Assert . IsTrue ( names . Contains ( "file_2.jpg" ));
string downloadableFile = names [ 0 ];
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
Assert . AreEqual ( "Hello, World!" , fileContent . Trim ());
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
Directory . Delete ( targetDirectory , recursive : true );
}
[TestMethod]
public void CustomExecutor ()
{
driver = new RemoteWebDriver ( GridUrl , new FirefoxOptions ());
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
Directory . CreateDirectory ( targetDirectory );
string targetFile = Path . GetFullPath ( Path . Combine ( targetDirectory , "fullPage.png" ));
using ( var memoryStream = new MemoryStream ( image . AsByteArray ))
using ( var fileStream = new FileStream ( targetFile , FileMode . Create ))
{
memoryStream . WriteTo ( fileStream );
}
Assert . IsTrue ( File . Exists ( targetFile ));
Directory . Delete ( targetDirectory , true );
}
}
}
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
examples/ruby/spec/drivers/remote_webdriver_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec . describe 'Remote WebDriver' do
let ( :target_directory ) { File . join ( Dir . tmpdir , SecureRandom . uuid ) }
let ( :wait ) { Selenium :: WebDriver :: Wait . new ( timeout : 2 ) }
let ( :server ) do
Selenium :: Server . get ( :latest ,
background : true ,
args : %w[--selenium-manager true --enable-managed-downloads true] )
end
let ( :grid_url ) { server . webdriver_url }
before { server . start }
after { server . stop }
it 'starts remotely' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
expect { driver . session_id } . not_to raise_exception
end
it 'uploads' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : server . webdriver_url , options : options
driver . get ( 'https://the-internet.herokuapp.com/upload' )
upload_file = File . expand_path ( '../spec_support/selenium-snapshot.png' , __dir__ )
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
file_name = driver . find_element ( id : 'uploaded-files' )
expect ( file_name . text ) . to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
file_names = %w[file_1.txt file_2.jpg]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( id : 'file-1' ) . click
driver . find_element ( id : 'file-2' ) . click
wait . until { driver . downloadable_files . include? 'file_2.jpg' }
files = driver . downloadable_files
expect ( files ) . to eq file_names
downloadable_file = files . first
driver . download_file ( downloadable_file , target_directory )
file_content = File . read ( " #{ target_directory } / #{ downloadable_file } " ) . strip
expect ( file_content ) . to eq ( 'Hello, World!' )
driver . delete_downloadable_files
expect ( driver . downloadable_files ) . to be_empty
end
end
上传 对于远程WebDriver会话, 上传文件 更为复杂,
因为要上传的文件可能在执行代码的计算机上,
但远程计算机上的驱动程序正在其本地文件系统上查找提供的路径.
解决方案是使用本地文件检测器.
设置一个后, Selenium将捆绑文件,
并将其发送到远程计算机, 以便驱动程序可以看到对它的引用.
默认情况下, 某些实现包含一个基本的本地文件检测器,
并且所有这些实现都允许自定义文件检测器.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Java does not include a Local File Detector by default, so you must always add one to do uploads.
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
Python adds a local file detector to remote webdriver instances by default, but you can also create your own class.
file_name_element = driver . find_element ( By . ID , "uploaded-files" )
file_name = file_name_element . text
examples/python/tests/drivers/test_remote_webdriver.py
Copy
Close
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
def test_start_remote ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
assert "localhost" in driver . command_executor . _url
driver . quit ()
def test_uploads ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
driver . get ( "https://the-internet.herokuapp.com/upload" )
upload_file = os . path . abspath (
os . path . join ( os . path . dirname ( __file__ ), ".." , "selenium-snapshot.png" ))
driver . file_detector = LocalFileDetector ()
file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" )
file_input . send_keys ( upload_file )
driver . find_element ( By . ID , "file-submit" ) . click ()
file_name_element = driver . find_element ( By . ID , "uploaded-files" )
file_name = file_name_element . text
assert file_name == "selenium-snapshot.png"
def test_downloads ( server , temp_dir ):
options = webdriver . ChromeOptions ()
options . enable_downloads = True
driver = webdriver . Remote ( command_executor = server , options = options )
file_names = [ "file_1.txt" , "file_2.jpg" ]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( By . ID , "file-1" ) . click ()
driver . find_element ( By . ID , "file-2" ) . click ()
WebDriverWait ( driver , 3 ) . until ( lambda d : "file_2.jpg" in d . get_downloadable_files ())
files = driver . get_downloadable_files ()
assert files == file_names
downloadable_file = files [ 0 ]
target_directory = temp_dir
driver . download_file ( downloadable_file , target_directory )
target_file = os . path . join ( target_directory , downloadable_file )
with open ( target_file , "r" ) as file :
assert "Hello, World!" in file . read ()
driver . delete_downloadable_files ()
assert not driver . get_downloadable_files ()
.NET adds a local file detector to remote webdriver instances by default, but you can also create your own class.
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
Copy
Close
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Threading.Tasks ;
using Microsoft.IdentityModel.Tokens ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
using OpenQA.Selenium.Remote ;
using OpenQA.Selenium.Support.UI ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup ()
{
await StartServer ();
}
[TestMethod]
public void RunRemote ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
Assert . IsInstanceOfType ( driver , typeof ( IHasDownloads ));
}
[TestMethod]
public void Uploads ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://the-internet.herokuapp.com/upload" ;
string baseDirectory = AppContext . BaseDirectory ;
string relativePath = "../../../TestSupport/selenium-snapshot.png" ;
string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath ));
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" ));
Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text );
}
[TestMethod]
public void Downloads ()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
driver . FindElement ( By . Id ( "file-1" )). Click ();
driver . FindElement ( By . Id ( "file-2" )). Click ();
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 3 ));
wait . Until ( d => (( RemoteWebDriver ) d ). GetDownloadableFiles (). Contains ( "file_2.jpg" ));
List < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
Assert . IsTrue ( names . Contains ( "file_2.jpg" ));
string downloadableFile = names [ 0 ];
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
Assert . AreEqual ( "Hello, World!" , fileContent . Trim ());
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
Directory . Delete ( targetDirectory , recursive : true );
}
[TestMethod]
public void CustomExecutor ()
{
driver = new RemoteWebDriver ( GridUrl , new FirefoxOptions ());
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
Directory . CreateDirectory ( targetDirectory );
string targetFile = Path . GetFullPath ( Path . Combine ( targetDirectory , "fullPage.png" ));
using ( var memoryStream = new MemoryStream ( image . AsByteArray ))
using ( var fileStream = new FileStream ( targetFile , FileMode . Create ))
{
memoryStream . WriteTo ( fileStream );
}
Assert . IsTrue ( File . Exists ( targetFile ));
Directory . Delete ( targetDirectory , true );
}
}
}
Ruby adds a local file detector to remote webdriver instances by default, but you can also create your own lambda:
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
examples/ruby/spec/drivers/remote_webdriver_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec . describe 'Remote WebDriver' do
let ( :target_directory ) { File . join ( Dir . tmpdir , SecureRandom . uuid ) }
let ( :wait ) { Selenium :: WebDriver :: Wait . new ( timeout : 2 ) }
let ( :server ) do
Selenium :: Server . get ( :latest ,
background : true ,
args : %w[--selenium-manager true --enable-managed-downloads true] )
end
let ( :grid_url ) { server . webdriver_url }
before { server . start }
after { server . stop }
it 'starts remotely' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
expect { driver . session_id } . not_to raise_exception
end
it 'uploads' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : server . webdriver_url , options : options
driver . get ( 'https://the-internet.herokuapp.com/upload' )
upload_file = File . expand_path ( '../spec_support/selenium-snapshot.png' , __dir__ )
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
file_name = driver . find_element ( id : 'uploaded-files' )
expect ( file_name . text ) . to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
file_names = %w[file_1.txt file_2.jpg]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( id : 'file-1' ) . click
driver . find_element ( id : 'file-2' ) . click
wait . until { driver . downloadable_files . include? 'file_2.jpg' }
files = driver . downloadable_files
expect ( files ) . to eq file_names
downloadable_file = files . first
driver . download_file ( downloadable_file , target_directory )
file_content = File . read ( " #{ target_directory } / #{ downloadable_file } " ) . strip
expect ( file_content ) . to eq ( 'Hello, World!' )
driver . delete_downloadable_files
expect ( driver . downloadable_files ) . to be_empty
end
end
下载 Chrome、Edge和Firefox都允许您设置下载目录的位置.
但是, 当您在远程计算机上执行此操作时, 位置在远程计算机的本地文件系统上.
Selenium允许您启用下载功能, 将这些文件下载到客户端计算机上.
在网格中启用下载 当以节点或独立模式启动网格时,
你必须添加参数:
--enable-managed-downloads true
在客户端中启用下载 网格使用 se:downloadsEnabled
功能来切换是否负责管理浏览器位置.
每个实现在options类中都有一个方法来设置.
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( By . ID , "file-1" ) . click ()
driver . find_element ( By . ID , "file-2" ) . click ()
examples/python/tests/drivers/test_remote_webdriver.py
Copy
Close
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
def test_start_remote ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
assert "localhost" in driver . command_executor . _url
driver . quit ()
def test_uploads ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
driver . get ( "https://the-internet.herokuapp.com/upload" )
upload_file = os . path . abspath (
os . path . join ( os . path . dirname ( __file__ ), ".." , "selenium-snapshot.png" ))
driver . file_detector = LocalFileDetector ()
file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" )
file_input . send_keys ( upload_file )
driver . find_element ( By . ID , "file-submit" ) . click ()
file_name_element = driver . find_element ( By . ID , "uploaded-files" )
file_name = file_name_element . text
assert file_name == "selenium-snapshot.png"
def test_downloads ( server , temp_dir ):
options = webdriver . ChromeOptions ()
options . enable_downloads = True
driver = webdriver . Remote ( command_executor = server , options = options )
file_names = [ "file_1.txt" , "file_2.jpg" ]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( By . ID , "file-1" ) . click ()
driver . find_element ( By . ID , "file-2" ) . click ()
WebDriverWait ( driver , 3 ) . until ( lambda d : "file_2.jpg" in d . get_downloadable_files ())
files = driver . get_downloadable_files ()
assert files == file_names
downloadable_file = files [ 0 ]
target_directory = temp_dir
driver . download_file ( downloadable_file , target_directory )
target_file = os . path . join ( target_directory , downloadable_file )
with open ( target_file , "r" ) as file :
assert "Hello, World!" in file . read ()
driver . delete_downloadable_files ()
assert not driver . get_downloadable_files ()
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
Copy
Close
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Threading.Tasks ;
using Microsoft.IdentityModel.Tokens ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
using OpenQA.Selenium.Remote ;
using OpenQA.Selenium.Support.UI ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup ()
{
await StartServer ();
}
[TestMethod]
public void RunRemote ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
Assert . IsInstanceOfType ( driver , typeof ( IHasDownloads ));
}
[TestMethod]
public void Uploads ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://the-internet.herokuapp.com/upload" ;
string baseDirectory = AppContext . BaseDirectory ;
string relativePath = "../../../TestSupport/selenium-snapshot.png" ;
string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath ));
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" ));
Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text );
}
[TestMethod]
public void Downloads ()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
driver . FindElement ( By . Id ( "file-1" )). Click ();
driver . FindElement ( By . Id ( "file-2" )). Click ();
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 3 ));
wait . Until ( d => (( RemoteWebDriver ) d ). GetDownloadableFiles (). Contains ( "file_2.jpg" ));
List < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
Assert . IsTrue ( names . Contains ( "file_2.jpg" ));
string downloadableFile = names [ 0 ];
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
Assert . AreEqual ( "Hello, World!" , fileContent . Trim ());
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
Directory . Delete ( targetDirectory , recursive : true );
}
[TestMethod]
public void CustomExecutor ()
{
driver = new RemoteWebDriver ( GridUrl , new FirefoxOptions ());
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
Directory . CreateDirectory ( targetDirectory );
string targetFile = Path . GetFullPath ( Path . Combine ( targetDirectory , "fullPage.png" ));
using ( var memoryStream = new MemoryStream ( image . AsByteArray ))
using ( var fileStream = new FileStream ( targetFile , FileMode . Create ))
{
memoryStream . WriteTo ( fileStream );
}
Assert . IsTrue ( File . Exists ( targetFile ));
Directory . Delete ( targetDirectory , true );
}
}
}
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
examples/ruby/spec/drivers/remote_webdriver_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec . describe 'Remote WebDriver' do
let ( :target_directory ) { File . join ( Dir . tmpdir , SecureRandom . uuid ) }
let ( :wait ) { Selenium :: WebDriver :: Wait . new ( timeout : 2 ) }
let ( :server ) do
Selenium :: Server . get ( :latest ,
background : true ,
args : %w[--selenium-manager true --enable-managed-downloads true] )
end
let ( :grid_url ) { server . webdriver_url }
before { server . start }
after { server . stop }
it 'starts remotely' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
expect { driver . session_id } . not_to raise_exception
end
it 'uploads' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : server . webdriver_url , options : options
driver . get ( 'https://the-internet.herokuapp.com/upload' )
upload_file = File . expand_path ( '../spec_support/selenium-snapshot.png' , __dir__ )
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
file_name = driver . find_element ( id : 'uploaded-files' )
expect ( file_name . text ) . to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
file_names = %w[file_1.txt file_2.jpg]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( id : 'file-1' ) . click
driver . find_element ( id : 'file-2' ) . click
wait . until { driver . downloadable_files . include? 'file_2.jpg' }
files = driver . downloadable_files
expect ( files ) . to eq file_names
downloadable_file = files . first
driver . download_file ( downloadable_file , target_directory )
file_content = File . read ( " #{ target_directory } / #{ downloadable_file } " ) . strip
expect ( file_content ) . to eq ( 'Hello, World!' )
driver . delete_downloadable_files
expect ( driver . downloadable_files ) . to be_empty
end
end
列出可下载文件 请注意, Selenium不会等待文件下载完成,
因此, 该列表是给定会话目录中当前文件名的即时快照.
Java
Python
CSharp
Ruby
JavaScript
Kotlin examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
examples/python/tests/drivers/test_remote_webdriver.py
Copy
Close
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
def test_start_remote ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
assert "localhost" in driver . command_executor . _url
driver . quit ()
def test_uploads ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
driver . get ( "https://the-internet.herokuapp.com/upload" )
upload_file = os . path . abspath (
os . path . join ( os . path . dirname ( __file__ ), ".." , "selenium-snapshot.png" ))
driver . file_detector = LocalFileDetector ()
file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" )
file_input . send_keys ( upload_file )
driver . find_element ( By . ID , "file-submit" ) . click ()
file_name_element = driver . find_element ( By . ID , "uploaded-files" )
file_name = file_name_element . text
assert file_name == "selenium-snapshot.png"
def test_downloads ( server , temp_dir ):
options = webdriver . ChromeOptions ()
options . enable_downloads = True
driver = webdriver . Remote ( command_executor = server , options = options )
file_names = [ "file_1.txt" , "file_2.jpg" ]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( By . ID , "file-1" ) . click ()
driver . find_element ( By . ID , "file-2" ) . click ()
WebDriverWait ( driver , 3 ) . until ( lambda d : "file_2.jpg" in d . get_downloadable_files ())
files = driver . get_downloadable_files ()
assert files == file_names
downloadable_file = files [ 0 ]
target_directory = temp_dir
driver . download_file ( downloadable_file , target_directory )
target_file = os . path . join ( target_directory , downloadable_file )
with open ( target_file , "r" ) as file :
assert "Hello, World!" in file . read ()
driver . delete_downloadable_files ()
assert not driver . get_downloadable_files ()
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
Copy
Close
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Threading.Tasks ;
using Microsoft.IdentityModel.Tokens ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
using OpenQA.Selenium.Remote ;
using OpenQA.Selenium.Support.UI ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup ()
{
await StartServer ();
}
[TestMethod]
public void RunRemote ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
Assert . IsInstanceOfType ( driver , typeof ( IHasDownloads ));
}
[TestMethod]
public void Uploads ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://the-internet.herokuapp.com/upload" ;
string baseDirectory = AppContext . BaseDirectory ;
string relativePath = "../../../TestSupport/selenium-snapshot.png" ;
string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath ));
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" ));
Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text );
}
[TestMethod]
public void Downloads ()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
driver . FindElement ( By . Id ( "file-1" )). Click ();
driver . FindElement ( By . Id ( "file-2" )). Click ();
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 3 ));
wait . Until ( d => (( RemoteWebDriver ) d ). GetDownloadableFiles (). Contains ( "file_2.jpg" ));
List < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
Assert . IsTrue ( names . Contains ( "file_2.jpg" ));
string downloadableFile = names [ 0 ];
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
Assert . AreEqual ( "Hello, World!" , fileContent . Trim ());
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
Directory . Delete ( targetDirectory , recursive : true );
}
[TestMethod]
public void CustomExecutor ()
{
driver = new RemoteWebDriver ( GridUrl , new FirefoxOptions ());
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
Directory . CreateDirectory ( targetDirectory );
string targetFile = Path . GetFullPath ( Path . Combine ( targetDirectory , "fullPage.png" ));
using ( var memoryStream = new MemoryStream ( image . AsByteArray ))
using ( var fileStream = new FileStream ( targetFile , FileMode . Create ))
{
memoryStream . WriteTo ( fileStream );
}
Assert . IsTrue ( File . Exists ( targetFile ));
Directory . Delete ( targetDirectory , true );
}
}
}
files = driver . downloadable_files
examples/ruby/spec/drivers/remote_webdriver_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec . describe 'Remote WebDriver' do
let ( :target_directory ) { File . join ( Dir . tmpdir , SecureRandom . uuid ) }
let ( :wait ) { Selenium :: WebDriver :: Wait . new ( timeout : 2 ) }
let ( :server ) do
Selenium :: Server . get ( :latest ,
background : true ,
args : %w[--selenium-manager true --enable-managed-downloads true] )
end
let ( :grid_url ) { server . webdriver_url }
before { server . start }
after { server . stop }
it 'starts remotely' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
expect { driver . session_id } . not_to raise_exception
end
it 'uploads' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : server . webdriver_url , options : options
driver . get ( 'https://the-internet.herokuapp.com/upload' )
upload_file = File . expand_path ( '../spec_support/selenium-snapshot.png' , __dir__ )
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
file_name = driver . find_element ( id : 'uploaded-files' )
expect ( file_name . text ) . to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
file_names = %w[file_1.txt file_2.jpg]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( id : 'file-1' ) . click
driver . find_element ( id : 'file-2' ) . click
wait . until { driver . downloadable_files . include? 'file_2.jpg' }
files = driver . downloadable_files
expect ( files ) . to eq file_names
downloadable_file = files . first
driver . download_file ( downloadable_file , target_directory )
file_content = File . read ( " #{ target_directory } / #{ downloadable_file } " ) . strip
expect ( file_content ) . to eq ( 'Hello, World!' )
driver . delete_downloadable_files
expect ( driver . downloadable_files ) . to be_empty
end
end
下载文件 Selenium在列表中查找提供的文件的名称,
并将其下载到提供的目标目录.
Java
Python
CSharp
Ruby
JavaScript
Kotlin (( HasDownloads ) driver ). deleteDownloadableFiles ();
examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
examples/python/tests/drivers/test_remote_webdriver.py
Copy
Close
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
def test_start_remote ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
assert "localhost" in driver . command_executor . _url
driver . quit ()
def test_uploads ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
driver . get ( "https://the-internet.herokuapp.com/upload" )
upload_file = os . path . abspath (
os . path . join ( os . path . dirname ( __file__ ), ".." , "selenium-snapshot.png" ))
driver . file_detector = LocalFileDetector ()
file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" )
file_input . send_keys ( upload_file )
driver . find_element ( By . ID , "file-submit" ) . click ()
file_name_element = driver . find_element ( By . ID , "uploaded-files" )
file_name = file_name_element . text
assert file_name == "selenium-snapshot.png"
def test_downloads ( server , temp_dir ):
options = webdriver . ChromeOptions ()
options . enable_downloads = True
driver = webdriver . Remote ( command_executor = server , options = options )
file_names = [ "file_1.txt" , "file_2.jpg" ]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( By . ID , "file-1" ) . click ()
driver . find_element ( By . ID , "file-2" ) . click ()
WebDriverWait ( driver , 3 ) . until ( lambda d : "file_2.jpg" in d . get_downloadable_files ())
files = driver . get_downloadable_files ()
assert files == file_names
downloadable_file = files [ 0 ]
target_directory = temp_dir
driver . download_file ( downloadable_file , target_directory )
target_file = os . path . join ( target_directory , downloadable_file )
with open ( target_file , "r" ) as file :
assert "Hello, World!" in file . read ()
driver . delete_downloadable_files ()
assert not driver . get_downloadable_files ()
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
Copy
Close
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Threading.Tasks ;
using Microsoft.IdentityModel.Tokens ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
using OpenQA.Selenium.Remote ;
using OpenQA.Selenium.Support.UI ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup ()
{
await StartServer ();
}
[TestMethod]
public void RunRemote ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
Assert . IsInstanceOfType ( driver , typeof ( IHasDownloads ));
}
[TestMethod]
public void Uploads ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://the-internet.herokuapp.com/upload" ;
string baseDirectory = AppContext . BaseDirectory ;
string relativePath = "../../../TestSupport/selenium-snapshot.png" ;
string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath ));
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" ));
Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text );
}
[TestMethod]
public void Downloads ()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
driver . FindElement ( By . Id ( "file-1" )). Click ();
driver . FindElement ( By . Id ( "file-2" )). Click ();
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 3 ));
wait . Until ( d => (( RemoteWebDriver ) d ). GetDownloadableFiles (). Contains ( "file_2.jpg" ));
List < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
Assert . IsTrue ( names . Contains ( "file_2.jpg" ));
string downloadableFile = names [ 0 ];
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
Assert . AreEqual ( "Hello, World!" , fileContent . Trim ());
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
Directory . Delete ( targetDirectory , recursive : true );
}
[TestMethod]
public void CustomExecutor ()
{
driver = new RemoteWebDriver ( GridUrl , new FirefoxOptions ());
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
Directory . CreateDirectory ( targetDirectory );
string targetFile = Path . GetFullPath ( Path . Combine ( targetDirectory , "fullPage.png" ));
using ( var memoryStream = new MemoryStream ( image . AsByteArray ))
using ( var fileStream = new FileStream ( targetFile , FileMode . Create ))
{
memoryStream . WriteTo ( fileStream );
}
Assert . IsTrue ( File . Exists ( targetFile ));
Directory . Delete ( targetDirectory , true );
}
}
}
driver . download_file ( downloadable_file , target_directory )
examples/ruby/spec/drivers/remote_webdriver_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec . describe 'Remote WebDriver' do
let ( :target_directory ) { File . join ( Dir . tmpdir , SecureRandom . uuid ) }
let ( :wait ) { Selenium :: WebDriver :: Wait . new ( timeout : 2 ) }
let ( :server ) do
Selenium :: Server . get ( :latest ,
background : true ,
args : %w[--selenium-manager true --enable-managed-downloads true] )
end
let ( :grid_url ) { server . webdriver_url }
before { server . start }
after { server . stop }
it 'starts remotely' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
expect { driver . session_id } . not_to raise_exception
end
it 'uploads' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : server . webdriver_url , options : options
driver . get ( 'https://the-internet.herokuapp.com/upload' )
upload_file = File . expand_path ( '../spec_support/selenium-snapshot.png' , __dir__ )
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
file_name = driver . find_element ( id : 'uploaded-files' )
expect ( file_name . text ) . to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
file_names = %w[file_1.txt file_2.jpg]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( id : 'file-1' ) . click
driver . find_element ( id : 'file-2' ) . click
wait . until { driver . downloadable_files . include? 'file_2.jpg' }
files = driver . downloadable_files
expect ( files ) . to eq file_names
downloadable_file = files . first
driver . download_file ( downloadable_file , target_directory )
file_content = File . read ( " #{ target_directory } / #{ downloadable_file } " ) . strip
expect ( file_content ) . to eq ( 'Hello, World!' )
driver . delete_downloadable_files
expect ( driver . downloadable_files ) . to be_empty
end
end
删除已下载的文件 默认情况下, 下载目录在可用会话结束时被删除,
但您也可以在会话期间删除所有文件.
Java
Python
CSharp
Ruby
JavaScript
Kotlin examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
examples/python/tests/drivers/test_remote_webdriver.py
Copy
Close
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.file_detector import LocalFileDetector
from selenium.webdriver.support.wait import WebDriverWait
def test_start_remote ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
assert "localhost" in driver . command_executor . _url
driver . quit ()
def test_uploads ( server ):
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
driver . get ( "https://the-internet.herokuapp.com/upload" )
upload_file = os . path . abspath (
os . path . join ( os . path . dirname ( __file__ ), ".." , "selenium-snapshot.png" ))
driver . file_detector = LocalFileDetector ()
file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" )
file_input . send_keys ( upload_file )
driver . find_element ( By . ID , "file-submit" ) . click ()
file_name_element = driver . find_element ( By . ID , "uploaded-files" )
file_name = file_name_element . text
assert file_name == "selenium-snapshot.png"
def test_downloads ( server , temp_dir ):
options = webdriver . ChromeOptions ()
options . enable_downloads = True
driver = webdriver . Remote ( command_executor = server , options = options )
file_names = [ "file_1.txt" , "file_2.jpg" ]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( By . ID , "file-1" ) . click ()
driver . find_element ( By . ID , "file-2" ) . click ()
WebDriverWait ( driver , 3 ) . until ( lambda d : "file_2.jpg" in d . get_downloadable_files ())
files = driver . get_downloadable_files ()
assert files == file_names
downloadable_file = files [ 0 ]
target_directory = temp_dir
driver . download_file ( downloadable_file , target_directory )
target_file = os . path . join ( target_directory , downloadable_file )
with open ( target_file , "r" ) as file :
assert "Hello, World!" in file . read ()
driver . delete_downloadable_files ()
assert not driver . get_downloadable_files ()
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
Copy
Close
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Threading.Tasks ;
using Microsoft.IdentityModel.Tokens ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
using OpenQA.Selenium.Remote ;
using OpenQA.Selenium.Support.UI ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup ()
{
await StartServer ();
}
[TestMethod]
public void RunRemote ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
Assert . IsInstanceOfType ( driver , typeof ( IHasDownloads ));
}
[TestMethod]
public void Uploads ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://the-internet.herokuapp.com/upload" ;
string baseDirectory = AppContext . BaseDirectory ;
string relativePath = "../../../TestSupport/selenium-snapshot.png" ;
string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath ));
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" ));
Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text );
}
[TestMethod]
public void Downloads ()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
driver . FindElement ( By . Id ( "file-1" )). Click ();
driver . FindElement ( By . Id ( "file-2" )). Click ();
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 3 ));
wait . Until ( d => (( RemoteWebDriver ) d ). GetDownloadableFiles (). Contains ( "file_2.jpg" ));
List < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
Assert . IsTrue ( names . Contains ( "file_2.jpg" ));
string downloadableFile = names [ 0 ];
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
Assert . AreEqual ( "Hello, World!" , fileContent . Trim ());
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
Directory . Delete ( targetDirectory , recursive : true );
}
[TestMethod]
public void CustomExecutor ()
{
driver = new RemoteWebDriver ( GridUrl , new FirefoxOptions ());
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
Directory . CreateDirectory ( targetDirectory );
string targetFile = Path . GetFullPath ( Path . Combine ( targetDirectory , "fullPage.png" ));
using ( var memoryStream = new MemoryStream ( image . AsByteArray ))
using ( var fileStream = new FileStream ( targetFile , FileMode . Create ))
{
memoryStream . WriteTo ( fileStream );
}
Assert . IsTrue ( File . Exists ( targetFile ));
Directory . Delete ( targetDirectory , true );
}
}
}
driver . delete_downloadable_files
examples/ruby/spec/drivers/remote_webdriver_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
require 'selenium/server'
RSpec . describe 'Remote WebDriver' do
let ( :target_directory ) { File . join ( Dir . tmpdir , SecureRandom . uuid ) }
let ( :wait ) { Selenium :: WebDriver :: Wait . new ( timeout : 2 ) }
let ( :server ) do
Selenium :: Server . get ( :latest ,
background : true ,
args : %w[--selenium-manager true --enable-managed-downloads true] )
end
let ( :grid_url ) { server . webdriver_url }
before { server . start }
after { server . stop }
it 'starts remotely' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
expect { driver . session_id } . not_to raise_exception
end
it 'uploads' do
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : server . webdriver_url , options : options
driver . get ( 'https://the-internet.herokuapp.com/upload' )
upload_file = File . expand_path ( '../spec_support/selenium-snapshot.png' , __dir__ )
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
file_name = driver . find_element ( id : 'uploaded-files' )
expect ( file_name . text ) . to eq 'selenium-snapshot.png'
end
it 'downloads' do
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
file_names = %w[file_1.txt file_2.jpg]
driver . get ( 'https://www.selenium.dev/selenium/web/downloads/download.html' )
driver . find_element ( id : 'file-1' ) . click
driver . find_element ( id : 'file-2' ) . click
wait . until { driver . downloadable_files . include? 'file_2.jpg' }
files = driver . downloadable_files
expect ( files ) . to eq file_names
downloadable_file = files . first
driver . download_file ( downloadable_file , target_directory )
file_content = File . read ( " #{ target_directory } / #{ downloadable_file } " ) . strip
expect ( file_content ) . to eq ( 'Hello, World!' )
driver . delete_downloadable_files
expect ( driver . downloadable_files ) . to be_empty
end
end
浏览器特定功能 每个浏览器 都实现了仅对该浏览器可用的特殊功能.
每种Selenium实现都实现了在远程会话中使用这些功能的不同方式
Java
Python
CSharp
Ruby
JavaScript
Kotlin Java requires you to use the Augmenter class, which allows it to automatically pull in implementations for
all interfaces that match the capabilities used with the RemoteWebDriver
examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
Of interest, using the RemoteWebDriverBuilder
automatically augments the driver, so it is a great way
to get all the functionality by default:
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
Copy
Close
package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import java.io.File ;
import java.io.IOException ;
import java.net.URL ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.time.Duration ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.junit.jupiter.api.Assertions ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.By ;
import org.openqa.selenium.HasDownloads ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.chromium.HasCasting ;
import org.openqa.selenium.remote.Augmenter ;
import org.openqa.selenium.remote.LocalFileDetector ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.openqa.selenium.support.ui.WebDriverWait ;
public class RemoteWebDriverTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGrid ();
}
@Test
public void runRemote () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
}
@Test
public void uploads () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver . get ( "https://the-internet.herokuapp.com/upload" );
File uploadFile = new File ( "src/test/resources/selenium-snapshot.png" );
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
WebElement fileName = driver . findElement ( By . id ( "uploaded-files" ));
Assertions . assertEquals ( "selenium-snapshot.png" , fileName . getText ());
}
@Test
public void downloads () throws IOException {
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
List < String > fileNames = new ArrayList <> ();
fileNames . add ( "file_1.txt" );
fileNames . add ( "file_2.jpg" );
driver . get ( "https://www.selenium.dev/selenium/web/downloads/download.html" );
driver . findElement ( By . id ( "file-1" )). click ();
driver . findElement ( By . id ( "file-2" )). click ();
new WebDriverWait ( driver , Duration . ofSeconds ( 5 ))
. until ( d -> (( HasDownloads ) d ). getDownloadableFiles (). contains ( "file_2.jpg" ));
List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
Assertions . assertEquals ( fileNames , files );
String downloadableFile = files . get ( 0 );
Path targetDirectory = Files . createTempDirectory ( "download" );
(( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
String fileContent = String . join ( "" , Files . readAllLines ( targetDirectory . resolve ( downloadableFile )));
Assertions . assertEquals ( "Hello, World!" , fileContent );
(( HasDownloads ) driver ). deleteDownloadableFiles ();
Assertions . assertTrue ((( HasDownloads ) driver ). getDownloadableFiles (). isEmpty ());
}
@Test
public void augment () {
ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
driver = new Augmenter (). augment ( driver );
Assertions . assertTrue ( driver instanceof HasCasting );
}
@Test
public void remoteWebDriverBuilder () {
driver =
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
Assertions . assertTrue ( driver instanceof HasCasting );
}
}
.NET uses a custom command executor for executing commands that are valid for the given browser in the remote driver.
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
Copy
Close
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Threading.Tasks ;
using Microsoft.IdentityModel.Tokens ;
using Microsoft.VisualStudio.TestTools.UnitTesting ;
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
using OpenQA.Selenium.Firefox ;
using OpenQA.Selenium.Remote ;
using OpenQA.Selenium.Support.UI ;
namespace SeleniumDocs.Drivers
{
[TestClass]
public class RemoteWebDriverTest : BaseTest
{
[TestInitialize]
public async Task Setup ()
{
await StartServer ();
}
[TestMethod]
public void RunRemote ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
Assert . IsInstanceOfType ( driver , typeof ( IHasDownloads ));
}
[TestMethod]
public void Uploads ()
{
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://the-internet.herokuapp.com/upload" ;
string baseDirectory = AppContext . BaseDirectory ;
string relativePath = "../../../TestSupport/selenium-snapshot.png" ;
string uploadFile = Path . GetFullPath ( Path . Combine ( baseDirectory , relativePath ));
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
IWebElement fileName = driver . FindElement ( By . Id ( "uploaded-files" ));
Assert . AreEqual ( "selenium-snapshot.png" , fileName . Text );
}
[TestMethod]
public void Downloads ()
{
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
driver . Url = "https://selenium.dev/selenium/web/downloads/download.html" ;
driver . FindElement ( By . Id ( "file-1" )). Click ();
driver . FindElement ( By . Id ( "file-2" )). Click ();
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 3 ));
wait . Until ( d => (( RemoteWebDriver ) d ). GetDownloadableFiles (). Contains ( "file_2.jpg" ));
List < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
Assert . IsTrue ( names . Contains ( "file_1.txt" ));
Assert . IsTrue ( names . Contains ( "file_2.jpg" ));
string downloadableFile = names [ 0 ];
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
string fileContent = File . ReadAllText ( Path . Combine ( targetDirectory , downloadableFile ));
Assert . AreEqual ( "Hello, World!" , fileContent . Trim ());
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
Assert . IsTrue ((( RemoteWebDriver ) driver ). GetDownloadableFiles (). IsNullOrEmpty ());
Directory . Delete ( targetDirectory , recursive : true );
}
[TestMethod]
public void CustomExecutor ()
{
driver = new RemoteWebDriver ( GridUrl , new FirefoxOptions ());
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Screenshot image = new Screenshot (( string ) screenshotResponse );
string targetDirectory = Path . Combine ( Path . GetTempPath (), Guid . NewGuid (). ToString ());
Directory . CreateDirectory ( targetDirectory );
string targetFile = Path . GetFullPath ( Path . Combine ( targetDirectory , "fullPage.png" ));
using ( var memoryStream = new MemoryStream ( image . AsByteArray ))
using ( var fileStream = new FileStream ( targetFile , FileMode . Create ))
{
memoryStream . WriteTo ( fileStream );
}
Assert . IsTrue ( File . Exists ( targetFile ));
Directory . Delete ( targetDirectory , true );
}
}
}
Ruby uses mixins to add applicable browser specific methods to the Remote WebDriver session;
the methods should always just work for you.
追踪客户端请求 此功能仅适用于Java客户端绑定 (Beta版以后).
远程WebDriver客户端向Selenium网格服务器发送请求,
后者将请求传递给WebDriver.
应该在服务器端和客户端启用跟踪,
以便端到端地追踪HTTP请求.
两端都应该有一个指向可视化框架的追踪导出器设置.
默认情况下,
对客户端和服务器都启用追踪.
若设置可视化框架Jaeger UI及Selenium Grid 4,
请参阅所需版本的追踪设置 .
对于客户端设置, 请执行以下步骤.
添加所需依赖 可以使用Maven安装追踪导出器的外部库.
在项目pom.xml中添加 opentelemetry-exporter-jaeger
和 grpc-netty 的依赖项:
<dependency>
<groupId> io.opentelemetry</groupId>
<artifactId> opentelemetry-exporter-jaeger</artifactId>
<version> 1.0.0</version>
</dependency>
<dependency>
<groupId> io.grpc</groupId>
<artifactId> grpc-netty</artifactId>
<version> 1.35.0</version>
</dependency>
在运行客户端时添加/传递所需的系统属性 System . setProperty ( "otel.traces.exporter" , "jaeger" );
System . setProperty ( "otel.exporter.jaeger.endpoint" , "http://localhost:14250" );
System . setProperty ( "otel.resource.attributes" , "service.name=selenium-java-client" );
ImmutableCapabilities capabilities = new ImmutableCapabilities ( "browserName" , "chrome" );
WebDriver driver = new RemoteWebDriver ( new URL ( "http://www.example.com" ), capabilities );
driver . get ( "http://www.google.com" );
driver . quit ();
有关所需Selenium版本
及其外部依赖关系版本等更多信息,
请参阅追踪设置 .
更多信息请访问: