java 中 使用selenium 的一些思考

java 中 使用selenium 的一些思考

简单介绍selenium

是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。

image.png

我们经常是拿来做一些爬虫相关的工具,自动爬取一些数据。

官网

WebDriver

在WebDriver中也有类似的三个角色:

  • 工程师写的自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)
  • 浏览器的驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
  • 浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作

image.png

一些思考

定位元素

经常使用的是下面两个方法。

 ​
 clickButtonXPath  是根据元素位置去定位,简单就是html 
     chromeBrowser.clickElementByXPath("//input[@id='queryForm:btn']/../input[4]");
     简单说一下语法
         // 代表 根元素 
         //input  代表将选择页面上的所有input 元素
         [@id='queryForm:btn'] 代表筛选 id 为queryForm:btn 的元素
         / 代表 用来选择子元素
         text() 用来选择拥有特定的文本名称
         contains(属性:属性值)  
         例如:div[contains(text(),'忘记密码')] 将选择div 下文本包含密码的元素
         
         
 ​
 clickElementByCssSelector 是根据元素的style 去定位,就是css
     chromeBrowser.clickElementByCssSelector("#ul1>li:first-child");
  简单说一下语法:
       #ul1 选择 id=ul1 的元素
       > 代表 子元素
       li:first-child   代表li元素第1个子元素:
       :nth-child(n)    父元素第n个子元素
     
 ​

image.png

具体可以查看 CSS选择器与Xpath常用语法及对比

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")));
 ​
 // 在设定时间内找到后就返回,超时直接抛异常

参考文章

selenium使用教程详解-java版本

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYXnRn31' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片