lsekfe 发表于 2023-6-13 10:52:05

如何使用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]
查看完整版本: 如何使用selenium 的一些思考运用在java中?