[跟着官方文档学Selenium][学习笔记][四][WebDriver的功能]

举报
John2021 发表于 2022/03/30 19:30:35 2022/03/30
【摘要】 浏览器间共享的功能这些功能用于所有浏览器。为了通过Selenium WebDriver创建新会话,本地端应向远程端提供基本功能。远端使用相同的功能集来创建会话并描述当前会话功能。WebDriver提供了每个远程端将(或应该)支持实现的功能,以下是WebDriver支持的功能: browserName此功能用于设置既定会话的browserName。如果未在远端安装指定的浏览器,则会话创建将失...

浏览器间共享的功能

这些功能用于所有浏览器。为了通过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种状态:dismissacceptdismiss and notifyaccept and notifyignore

setWindowRect

此命令更改当前浏览上下文中窗口的大小和位置。此命令作为getWindowRect对应的设置方法,该命令接受widthheightxy作为可选参数。
在自动化期间,当前浏览上下文将与描述浏览器窗口可见性状态的窗口状态相关联。窗口状态为:maximizedminimizednormalfullscreen
设置widthheight不能保证结果窗口的大小一定完全匹配所请求的窗口大小。这是因为某些驱动程序可能无法以单像素为单位调整大小。因此,通过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);
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。