基于Java+Selenium的WebUI⾃动化测试框架(⼀)---页⾯元素
定位器
对于⾃动化测试,尤其是UI的⾃动化测试。是很多做⿊盒功能测试的同学,⼊门⾃动化测试⼀个最为直观的或者说最容易理解的途径之⼀。
 对于⼿⼯测试和⾃动化测试的优劣,⽹上有很多论述,在这⾥不作展开讨论。但是,让测试⼈员解放⽣产⼒,提⾼效率,把精⼒关注与最为重要的核⼼业务逻辑与测试设计上,是每个测试团队所必需要关注的。因此,在适当的范围内开展⾃动化测试,是可以提⾼整个测试团队的⽣产率的。
 对于Selenium,这个东西是⼀个浏览器应⽤程序测试⼯具。之所以选择它做WebUI的⾃动化测试主要是因为它有以下两⼤优势:
1.直接在浏览器中运⾏,就像真实⽤户所做的⼀样,可以模拟终端⽤户的操作,从最终客户的⾓度来测试应⽤程序。(这⼀点和⿊盒功能测试很像吧。)
2.可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运⾏。其他测试⼯具都不能覆盖如此多的平台。(嗯,多⾯能⼿)
对于Java语⾔,我只想说你⽤你最拿⼿的就好。⼀个好的测试⼈员,不应该被开发语⾔所束缚。不管是Java/Python/Ruby/C#.........只要你熟悉,就尽量把它⽤起来吧。语⾔只是⼯具。
接下来,我们好好的慢慢的理解⼀些东西,然后来逐步的去写⼀点东西,来认识⼀下⾃动化测试框架是个什么东西。
PS:阅读本⽂的同学,希望拥有JAVA语⾔编程基础,了解基本的JAVA语法与数据结构,同时,对Selenium的基本API有所了解。
 在写这个框架之前,我们要明确我们主要操作的对象是什么。------->页⾯元素。
我们要了解java在使⽤selenium时的基本操作。例如,使⽤以下代码:
driver.findElement(By.xpath("/html/body/div/div/div[2]/form/button")).click();
在这⾥,driver的意思是定义的WebDriver,findElement是driver这个对象调⽤的⽅法----->寻页⾯元素,By.xpath是定位页⾯元素的⽅式,(“/html/body/div/div/div[2]/form/button”)是定位页⾯元素的参数,
.click()是到页⾯元素后的动作------->点击。
那么,我们在这⾥考虑⼀下。对于通常的⿊盒功能测试中,我们想在⽹页上⾯去⼀个地⽅,进⾏点击或者输⼊⽂字等操作的时候,
我们⼀般会这样说:“⽤户名输⼊admin,密码是abcd”。
但是对于测试的代码来说,实际上有可能是:“到页⾯元素ID是UserId的元素,使⽤sendKeys⽅法,参数为admin,到页⾯元素ID是Password的元素,使⽤sendKeys⽅法,参数是abcd”。
需要解决的问题:
⽤户名(我们说的)--------->到页⾯元素ID是UserId的元素(代码),输⼊admin(我们说的)--------->使⽤sendKeys⽅法,参数为admin。(代码)
⼀个页⾯元素的寻需要⼏个要素,寻的⽅式,寻的参数,等待的时间。另外,为了我们说的话,代码能够明⽩,需要加上⼀个名字,⽤来告诉代码。
我们需要⾃⼰定义⼀个类,这个类就是页⾯元素类。通过上⾯的说明,我们知道这个类中需要定义的基本变量。(定位⽅法,路径,名字),另外,寻路径需要时间,我们再加上⼀个时间。
package webui.xUtils;
public class Position {
  private String path; //----->路径
//位置名字,就是我们通常意义上叫的名字。例如:⽤户名输⼊框
  private String positionName;
  private ByType type;//定位⽅法
  private int waitSec;//等待时间
  //selenium的基本⼋种定位⽅法。
  public enum ByType{
      xpath,id,name,className, cssSelector,tagName, partialLinkText,linkText
  }
  public String getPath() {
    return path;
  }
  public void setPath(String path) {
    this.path = path;
  }
  public String getPositionName() {
    return positionName;
  }
  public void setPositionName(String positionName) {
    this.positionName = positionName;
  }
  public ByType getType() {
    return type;
  }
  public void setType(ByType type) {
    pe = type;
  }
  public Position(String path, ByType type, String positionName) {
    super();
    this.path = path;
    this.positionName = positionName;
    pe = type;
  }
  //这种可以看作是针对iframe的情况
  public Position(String path,String positionName) {
    super();
    this.path = path;
    this.positionName = positionName;
  }
  public Position(String path, int waitSec, ByType type, String positionName) {
    super();
    this.path = path;
    this.waitSec = waitSec;
    this.positionName = positionName;
    pe = type;
  }
  public int getWaitSec() {
    return waitSec;
  }
  public void setWaitSec(int waitSec) {
    this.waitSec = waitSec;web布局框架
  }
}
使⽤上⾯的代码,我们就定义了最初的⼀个Position类,这就是我们要寻的页⾯元素。