浏览器选项
这些capabilities用于所有浏览器.
在 Selenium 3 中, capabilities是借助"Desired Capabilities"类定义于会话中的.
从 Selenium 4 开始, 您必须使用浏览器选项类.
对于远程驱动程序会话, 浏览器选项实例是必需的, 因为它确定将使用哪个浏览器.
这些选项在 Capabilities 的 w3c 规范中进行了描述.
每个浏览器都有 自定义选项 , 是规范定义之外的内容.
browserName
默认情况下,使用 Options 类实例时会设置浏览器名称.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
browserVersion
此功能是可选的,用于在远程端设置可用的浏览器版本.
在最新版本的 Selenium 中,如果在系统上找不到该版本,
它将被 Selenium Manager 自动下载
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
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
事件触发并返回.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
/examples/ruby/spec/drivers/options_spec.rb
/examples/javascript/test/capabilities/pageLoading.spec.js
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
事件触发并返回.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
/examples/ruby/spec/drivers/options_spec.rb
/examples/javascript/test/capabilities/pageLoading.spec.js
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 仅等待初始页面已下载.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
/examples/ruby/spec/drivers/options_spec.rb
/examples/javascript/test/capabilities/pageLoading.spec.js
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 将在远程端设置操作系统.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
acceptInsecureCerts
此功能检查在会话期间导航时
是否使用了过期的 (或) 无效的 TLS Certificate .
如果将功能设置为 false,
则页面浏览遇到任何域证书问题时,
将返回insecure certificate error .
如果设置为 true, 则浏览器将信任无效证书.
默认情况下, 此功能将信任所有自签名证书.
设置后, acceptInsecureCerts 功能将在整个会话中生效.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
/examples/javascript/test/capabilities/pageLoading.spec.js
timeouts
WebDriver session 具有一定的 session timeout 间隔,
在此间隔内, 用户可以控制执行脚本或从浏览器检索信息的行为.
每个会话超时都配置有不同 timeouts 的组合,
如下所述:
Script Timeout:
指定在当前浏览上下文中, 中断正在执行脚本的时机.
WebDriver创建新会话时,
将设置默认的超时时间为 30,000 .
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
Page Load Timeout:
指定在当前浏览上下文中, 加载网页的时间间隔.
WebDriver创建新会话时,
默认设置超时时间为 300,000 .
如果页面加载限制了给定 (或默认) 的时间范围,
则该脚本将被 TimeoutException 停止.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
Implicit Wait Timeout
指定在定位元素时, 等待隐式元素定位策略的时间.
WebDriver创建新会话时,
将设置默认超时时间为 0 .
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
unhandledPromptBehavior
指定当前会话 user prompt handler 的状态.
默认为 dismiss and notify state .
User Prompt Handler
这定义了在远端出现用户提示时必须采取的措施.
该行为由unhandledPromptBehavior 功能定义,
具有以下状态:
- dismiss
- accept
- dismiss and notify
- accept and notify
- ignore
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
/examples/ruby/spec/drivers/options_spec.rb
注意:对于 beforeunload 提示框,
除了启用 BiDi 外,
ChromeDriver 还需要设置 ignore 才能保持提示框打开。
setWindowRect
用于所有支持 调整大小和重新定位
命令 的远程终端.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
strictFileInteractability
新功能用于是否对 类型为文件的输入(input type=file) 元素进行严格的交互性检查.
默认关闭严格性检查,
在将 元素的Send Keys 方法作用于隐藏的文件上传时,
会有控制方面的行为区别.
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/ruby/spec/drivers/options_spec.rb
proxy
代理服务器充当客户端和服务器之间的请求中介.
简述而言, 流量将通过代理服务器流向您请求的地址, 然后返回.
使用代理服务器用于Selenium的自动化脚本,
可能对以下方面有益:
- 捕获网络流量
- 模拟网站后端响应
- 在复杂的网络拓扑结构或严格的公司限制/政策下访问目标站点.
如果您在公司环境中,
并且浏览器无法连接到URL,
则最有可能是因为环境, 需要借助代理进行访问.
Selenium WebDriver提供了如下设置代理的方法
/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
/examples/python/tests/drivers/test_options.py
/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
/examples/ruby/spec/drivers/options_spec.rb
/examples/javascript/test/drivers/options.spec.js
/examples/kotlin/src/test/kotlin/dev/selenium/drivers/OptionsTest.kt