如何使用selenium 的一些思考运用在java中?
简单介绍selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。
http://www.51testing.com/attachments/2023/06/15326880_202306091443111cxWM.jpg
我们经常是拿来做一些爬虫相关的工具,自动爬取一些数据。
WebDriver
在WebDriver中也有类似的三个角色:
工程师写的自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)。
浏览器的驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器。
浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。
http://www.51testing.com/attachments/2023/06/15326880_202306091443151h41v.jpg
一些思考
定位元素
经常使用的是下面两个方法。
clickButtonXPath是根据元素位置去定位,简单就是html
chromeBrowser.clickElementByXPath("//input[@id='queryForm:btn']/../input");
简单说一下语法
// 代表 根元素
//input代表将选择页面上的所有input 元素
[@id='queryForm:btn'] 代表筛选 id 为queryForm:btn 的元素
/ 代表 用来选择子元素
text() 用来选择拥有特定的文本名称
contains(属性:属性值)
例如:div 将选择div 下文本包含密码的元素
clickElementByCssSelector 是根据元素的style 去定位,就是css
chromeBrowser.clickElementByCssSelector("#ul1>li:first-child");
简单说一下语法:
#ul1 选择 id=ul1 的元素
> 代表 子元素
li:first-child 代表li元素第1个子元素:
:nth-child(n) 父元素第n个子元素
http://www.51testing.com/attachments/2023/06/15326880_202306091443181DuPB.jpg
iframe
这个必须拿出来,着重说一下,原先在iframe 外,需要切换到iframe 里进行操作,再要对iframe 外元素进行操作时,需要返回到默认的iframe 外,否则会一直找不到元素。
通过切换会父元素或者默认元素处理。
// 切换到父元素
chromeBrowser.switchToParentFrame("main-frame");
// 切换到默认内容页面
chromeBrowser.defaultContent();
javascriptExecute
执行脚本 ,遇到比较复杂的操作,需要通过脚本去处理。比如往下滑动滚动条。
chromeBrowser.javascriptExecute("var queryDivId = document.getElementById('queryDivId');queryDivId.scrollTop = queryDivId.scrollHeight;");
页面超时加载以及显示等待
在访问时,由于网络等各种因素,肯定会出现加载慢的情况,我们需要Driver 等待一下。
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
driver.get("https://www.baidu.com");
显示等待是等待指定元素设置的等待时间,在设置时间内,默认每隔0.5s检测一次当前的页面这个元素是否存在,如果在规定的时间内找到了元素则执行相关操作,如果超过设置时间检测不到则抛出异常。默认抛出异常为:NoSuchElementException。推荐使用显示等待。
WebDriverWait wait = new WebDriverWait(driver, 5);
// 查找id为“kw"的元素是否加载出来了(已经在页面DOM中存在)
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("kw")));
// 在设定时间内找到后就返回,超时直接抛异常
页:
[1]