加快 WEB 自动化定位工具

发表于:2017-7-26 13:18

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

 作者:felixiaot    来源:博客

  改造四:发送定位信息
  在上述查看中,可以将元素信息发送给服务端,服务端根据信息解析成POJO源码,复制到项目中即可。
  我这里抓取了一些元素定位信息,并发送个服务端,服务端会生成Baidu.java的类源文件。如下
  POJO源文件 Baidu.java
  package me.utils.selenium_utils.page;
      import org.openqa.selenium.WebElement;
      import org.openqa.selenium.support.FindBy;
      public class Baidu{
          /**
          * 百度logo
          **/
          @FindBy(xpath=".//*[@id='lg']/img")
          public  WebElement bd_logo;
          /**
          * 搜索框
          **/
          @FindBy(xpath=".//*[@id='kw']")
          public  WebElement kw;
          /**
          * hao123
          **/
          @FindBy(xpath=".//*[@id='u1']/a[2]")
          public  WebElement bd_hao123;
          /**
          * 地图链接
          **/
          @FindBy(xpath=".//*[@id='u1']/a[3]")
          public  WebElement bd_ditu_link;
          /**
          * 视频链接
          **/
          @FindBy(xpath=".//*[@id='u1']/a[4]")
          public  WebElement bd_shipin_link;
          /**
          * 新闻链接
          **/
          @FindBy(xpath=".//*[@id='u1']/a[1]")
          public  WebElement bd_news_link;
          /**
          * 搜索按钮
          **  public class BaiduPage extends Baidu {
      public void search(String content){
          kw.sendKeys(content);
          su.click();
      }}/
          @FindBy(xpath=".//*[@id='su']")
          public  WebElement su;
      }
  这时我们可以下载源码,将其复制到项目中应用。注意:这里不要手动修改定位Java类源文件。如果我们需要写一些方法时,继承该定位类即可。
  如下:我们写一个BaiduPage类
  在测试中使用,如下
  ...@Test
      void test() throws InterruptedException{
          driver = (WebDriver) context.getBean("freshWebDriver");
          driver.get("http://www.baidu.com");
          BaiduPage page = PageFactory.initElements(driver, BaiduPage.class);
          page.search("testerhome");
          Thread.sleep(5000);
          driver.close();
      }...
  为什么不能手动修改类?
  好处一在于一会我们要自动修改定位信息。好处二在于,下回自动生成时,也不会使你定义的search(String content)被覆盖掉。
  改造五:载入定位信息
  定位是需要经常修改的,这意味这,我们经常要手动找到已经失效的元素定位信息,这是一件令人沮丧的事情。
  载入的目的就是为了解决这个问题。点击载入后,会输入完整的类名,如me.utils.selenium_utils.page.Baidu。这是插件会从服务端下载定位信息。这里我们假设,刚才定位搜索框的信息是.//*[@id='kw1'],这时该定位在百度页面上无效的。我们载入看看
 
  点击查看
  看到这里显示.//*[@id='kw1']是无效的,因为在百度首页dom中根本不存在该定位元素。这时我们就可以删除后重新添加该元素。发送后会自动覆盖上次的定位信息,生成新的POJO类。
  服务端
  服务端的功能简单,就是收发元素定位信息,将信息生成Java源码,提供下载。这里没什么好说的,展示一下Json数据
  部分
  {
      "name": "Baidu",
      "url": "https://www.baidu.com/",
      "elements": [
          {
              "name": "bd_logo",
              "type": "xpath",
              "value": ".//*[@id='lg']/img",
              "description": "百度logo",
              "valid": true
          }
      ]}
  总结
  至此,我们可以准确的将定位信息,自动生成Java源码,且可维护。不必复制来复制去了。这里提供给大家这个想法和实践,小弟这些愚见,如有不妥之处,望指正,欢迎拍砖!最后来个完整的图。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • yigepodan
    2017-7-27 09:36:28

    学习了谢谢分享,没说具体肿么改造插件,看着较困难

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号