[跟着官方文档学Selenium][学习笔记][四][WebDriver的功能]
浏览器间共享的功能
这些功能用于所有浏览器。为了通过Selenium WebDriver创建新会话,本地端应向远程端提供基本功能。远端使用相同的功能集来创建会话并描述当前会话功能。
WebDriver提供了每个远程端将(或应该)支持实现的功能,以下是WebDriver支持的功能:
browserName
此功能用于设置既定会话的browserName
。如果未在远端安装指定的浏览器,则会话创建将失败
EdgeOptions edgeOptions = new EdgeOptions();
String browserName = edgeOptions.getBrowserName();
System.out.println(browserName);//MicrosoftEdge
browserVersion
这个功能是可选的,用于在远程端设置可用的浏览器版本,例如, 如果在仅安装80版本的系统上询问75版本的Chrome, 则会话创建将失败
页面加载策略
通过URL导航到新页面时,默认情况下,Selenium将等待页面完全加载后再进行响应。这对于初学者来说效果很好,但在加载大量第三方资源的页面上可能会导致等待较长时间。在这种情况下,使用非默认策略可以使测试的执行速度更快,但也可能导致不稳定,即页面上的元素随着元素加载和大小变化而改变位置。页面加载策略描述如下:
策略 | 准备完成的状态 | 备注 |
---|---|---|
normal | complete | 默认情况下使用,等待所有资源下载完成 |
eager | interactive | DOM访问已准备就绪,但其他资源(如图像)可能仍在加载中 |
none | Any | 完全不阻塞WebDriver |
代码示例
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
public class pageLoadStrategy
{
public static void main(String[] args)
{
EdgeOptions edgeOptions = new EdgeOptions();
//edgeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
//edgeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
edgeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
WebDriver webDriver = new EdgeDriver(edgeOptions);
try
{
webDriver.get("https://www.baidu.com/");
}
finally
{
webDriver.quit();
}
}
}
platformName
这标识了远端的操作系统,获取platformName
将返回操作系统的名称,在基于云的供应商中,设置platformName
将在远端设置操作系统
acceptInsecureCerts
这功能检查在会话期间导航时,是否使用了过期的或者无效的TLS Certificate
。
如果将其设置为false
,则页面浏览遇到任何域证书问题时,将返回insecure certificate error
。如果设置为true
,则浏览器将信任无效证书。
默认情况下,此功能将信任所有自签名证书。设置后,acceptInsecureCerts
功能将在整个会话中生效。
timeouts
WebDriver的session
具有一定的session timeout
间隔,在此间隔中,用户可以控制执行脚本或从浏览器检索信息的行为。每个会话超时都配置有不同的timeouts
组合,如下3项所述
Script Timeout
指定在当前浏览上下文中,中断正在执行脚本的时机。WebDriver创建新会话时,将设置默认的超时时间为30000.
Page Load Timeout
指定在当前浏览上下文中,加载网页的时间间隔。WebDriver创建新会话时,默认设置超时时间为300000。如果页面加载限制了给定(或默认)的时间范围,则该脚本将被TimeoutException
停止。
Implicit Wait Timeout
指定在定位元素时,等待隐式元素定位策略的时间。WebDriver创建新会话时,将设置默认超时时间为0。
unhandledPromptBehavior
指定当前会话user prompt handler
的状态。默认为dismiss and notify state
User Prompt Handler
这定义了在远端出现用户提示时必须采取的措施。该行为由unhandledPromptBehavior
功能定义,具有5种状态:dismiss
,accept
,dismiss and notify
,accept and notify
,ignore
。
setWindowRect
此命令更改当前浏览上下文中窗口的大小和位置。此命令作为getWindowRect
对应的设置方法,该命令接受width
,height
,x
,y
作为可选参数。
在自动化期间,当前浏览上下文将与描述浏览器窗口可见性状态的窗口状态相关联。窗口状态为:maximized
,minimized
,normal
,fullscreen
。
设置width
或height
不能保证结果窗口的大小一定完全匹配所请求的窗口大小。这是因为某些驱动程序可能无法以单像素为单位调整大小。因此,通过getWindowRect
获取窗口状态可能与浏览器设置的值不匹配。
strictFileInteractability
新功能用于是否对类型为文件的输入(input type=file) 元素进行严格的交互性检查。默认关闭严格性检查,在将元素的Send Keys方法作用于隐藏的文件上传时,会有控制方面的行为区别。
proxy
代理服务器充当客户端和服务器之间的请求中介。简述而言,流量将通过代理服务器流向您请求的地址,然后返回。使用代理服务器用于Selenium的自动化脚本,可能对以下方面有益:捕获网络流量、模拟网站后端相应、在复杂的网络拓扑结构或严格的公司限制/政策下访问目标站点。
如果您在公司环境中,并且浏览器无法连接到URL,则最有可能是因为环境,需要借助代理进行访问。
Selenium WebDriver设置代理代码如下:
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
public class testProxy
{
public static void main(String[] args)
{
//导包注意导入selenium的Proxy包
Proxy proxy = new Proxy();
proxy.setHttpProxy("<HOST:PORT>");
EdgeOptions edgeOptions = new EdgeOptions();
edgeOptions.setCapability("proxy", proxy);
WebDriver webDriver = new EdgeDriver(edgeOptions);
webDriver.get("https://www.baidu.com");
webDriver.manage().window().maximize();
webDriver.quit();
System.out.println("WebDriver Quit");
}
}
Chromium
上述的浏览器所共享的功能适用于:Chrome、Chromium、Edge。
Firefox
使用FirefoxOptions定义功能
FirefoxOptions
是为了Firefox浏览器定义功能的新方法,通常应优先使用预期功能(DesiredCapabilities)。
WebDriver webDriver;
FirefoxOptions options = new FirefoxOptions();
options.addPreference("network.proxy.type", 0);
webDriver = new RemoteWebDriver(options);
设置自定义配置文件
可以为Firefox创建自定义配置文件
WebDriver webDriver;
FirefoxProfile profile = new FirefoxProfile();
FirefoxOptions options = new FirefoxOptions();
options.setProfile(profile);
webDriver = new RemoteWebDriver(options);
- 点赞
- 收藏
- 关注作者
评论(0)