喜欢研究学习技术,喜欢和志同道合的人交流。 从事测试6年,专职性能3年经验,擅长性能测试,测试框架开发。 励志格言:只要想学习,永远都不会太晚;只要想进步,永远都会有空间。

Webdriver 利用java接口实现页面元素与脚本分离

上一篇 / 下一篇  2016-06-18 14:05:55 / 个人分类:selenium自动化测试

1、近期发现很多人在写webdriver脚本代码的时候,页面元素信息都是与脚本混合写在一起,这种情况,在后期产品出现UI变动的时候,就需要进行大面积的UI元素信息位置的修改,成本将非常的高,也一度降低了脚本的复用性。利用java接口这一特性,可以很好的解决这一个问题。下面以worktile网站登录功能进行实例讲解。

 

2、在没有进行页面封装的时候进行登录操作的脚本如下:

publicclassTest2 {

 publicstaticvoidmain(String[]args) {

      WebDriverdriver=newFirefoxDriver();

    driver.get("https://worktile.com/signin");

  driver.findElement(By.name("login_name")).sendKeys("test");

driver.findElement(By.name("login_password")).sendKeys("lp2010520334455");

 driver.findElement(By.xpath("//button[@type='button']")).click();

     driver.quit();

   }

}

 

注意:可以发现,findElement后面查找的页面元素信息都是直接写在脚本当中,并未有进行与脚本进行隔离,当前端页面ui出现改动的时候,变更的成本将非常之大。


3、接下来定义一个pageObjectStore接口,在接口里面定义信息保存页面元素位置信息,如下内容:

publicinterfacePageObjectStore{

   StringloginName="name=login_name";//登录名称输入框

   StringPWD="name=login_password";//登录密码输入框

   StringloginButton="xpath=//button[@type='button']";//登录按钮

   StringlogoutLink="xpath=//a[contains(text(),'退 ')]";//退出按钮

  

}

注意:接口里面定义的变量默认为public static final修饰。

 

4、接下来针对driver.findElementby)方法进行一次封装,因为每次查找页面元素定位的方式都不一样,需要对这些by的方法进行统一的封装,调用同一个查找方法,亦可判断出是那种查找方式。

publicclassWebDriverLib {

  

  publicstaticWebDriverdriver;

      publicstaticBy parseObject(Stringp_object) {

        StringnewObjecyt=null;

 

       if(p_object.startsWith(".//") ||p_object.startsWith("//")) {

          returnBy.xpath(p_object);

        }elseif(p_object.startsWith("link=") ||p_object.startsWith("Link=")) {

          newObjecyt=p_object.substring(p_object.indexOf("=") + 1);

          returnBy.linkText(newObjecyt);

        }elseif(p_object.startsWith("xpath=")) {

          newObjecyt=p_object.substring(p_object.indexOf("=") + 1);

          returnBy.xpath(newObjecyt);

        }elseif(p_object.startsWith("id=")) {

          newObjecyt=p_object.substring(p_object.indexOf("=") + 1);

          returnBy.id(newObjecyt);

        }elseif(p_object.startsWith("css=")) {

          newObjecyt=p_object.substring(p_object.indexOf("=") + 1);

          returnBy.cssSelector(newObjecyt);

        }elseif(p_object.startsWith("class=")) {

          newObjecyt=p_object.substring(p_object.indexOf("=") + 1);

          returnBy.className(newObjecyt);

        }elseif(p_object.startsWith("tagName=")) {

          newObjecyt=p_object.substring(p_object.indexOf("=") + 1);

          returnBy.tagName(newObjecyt);

        }elseif(p_object.startsWith("name=")) {

          newObjecyt=p_object.substring(p_object.indexOf("=") + 1);

          returnBy.name(newObjecyt);

        }else

          returnnull;

      }  

}

     

5、通过以上方式,最后利用接口保存页面元素,进行调用接口中的方法获取到页面元素信息,实现脚本分离。

publicclassTest2extendsWebDriverLib{

  publicstaticvoidmain(String[]args) {

     driver=newFirefoxDriver();

     driver.get("https://worktile.com/signin");

  driver.findElement(parseObject(PageObjectStore.loginName)).sendKeys("test");

  driver.findElement(parseObject(PageObjectStore.PWD)).sendKeys("lp2010520334455");

     driver.findElement(parseObject(PageObjectStore.loginButton)).click();

     driver.quit();

   }

}

 

可以看出:parseObject(PageObjectStore.loginName))这种方式从接口中读取页面元素信息,即使后期出现页面元素信息变动,只需要修改接口中的变量即可,而且只修改一次。



TAG: java 元素 接口

 

评分:0

我来说两句

Open Toolbar