java 中 使用selenium 的一些思考

发表于:2023-6-13 09:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:涛涛之海    来源:稀土掘金

  简单介绍selenium
  是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。
  我们经常是拿来做一些爬虫相关的工具,自动爬取一些数据。
  WebDriver
  在WebDriver中也有类似的三个角色:
  工程师写的自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)。
  浏览器的驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器。
  浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。
  一些思考
  定位元素
  经常使用的是下面两个方法。
   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个子元素
  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")));
    
   // 在设定时间内找到后就返回,超时直接抛异常
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号