随着selenium学习的深入,越来越多的测试开发人员和各大公司都已在自动化测试开发中使用了PageObject模式,可是真正用好的确很少,Page Object的用法SuperXi在实际工作中有很多种,都是SuperX在工作中积累和创新出来的,你在互联网上是搜不到的,许多公司能掌握两种的就已经很不错了,这里SuperXi给大家介绍一下PageObject最标准的用法。

 

 大家得首先需要理解为什么要用PageObject,我们先看下没有应用这个模式的时候咱们的测试代码是什么样的,一大坨代码堆在一起,其中还有不少代码是重复的,既包含了测试业务逻辑比如登录网站,购物,下订单等待,又包含大量的验证(Verify),这样做的结果造成了大量重复的代码,更严重的是维护成本也是相当的高,光是阅读起来就很不是滋味,耗时耗力。那么PageObject模式给我们带来了什么好处呢,那就是逻辑的封装,实现了测试业务逻辑和测试代码的分离,这样光是在做自动化代码开发的时候不同的人,不同的团队可以侧重于不同的模块,这样光是开发起来都会很高效,写测试业务逻辑的人可以注重于实现业务的逻辑的PageObject类,而真正写测试代码的人则可以借助于其他团队或其他人写好的PageObject类很方便的写出测试代码,并可以专注于验证点的设计和真正的测试代码的编写,这才是PageObject真正的用意所在。

 

下面SuperXi教你如何进行PageObject类的开发。咱们就用AutotestOps官网做例子。我们需要一个简化版的首页类,我们需要再首页的编辑框内输入一个搜索词,然后点击搜索,咱们需要得到搜索后的文章个数。

首先咱们先敲代码写AutoTestOps简化版的首页的PageObject,再接着写搜索页面的PageObject类:

大概是这个样子:

public class AutoTestOpsIndexPage {

    @FindBy(how = How.ID, using = "q")
    private WebElement searchinput;

    @FindBy(how = How.CSS, using = "[value='
搜索']")
    private WebElement searchbtn;

  public  AutoTestOpsIndexPage(WebDriver driver)
  {
      PageFactory.initElements(driver,this);
  }
    public void GotoSearchPage()
    {
        searchinput.sendKeys("
页面");
        searchbtn.submit();

    }
}


public class AutoTestOpsSearchPage {
    @FindBy(how = How.CSS, using = "div.search-su>p>em")
    private WebElement articleCount;

    WebDriver _driver;

    public  AutoTestOpsSearchPage(WebDriver driver)
    {
        PageFactory.initElements(driver,this);
    }
    public String GetArticleCount()
    {
        return articleCount.getText().trim();
    }
}

 

 
然后我们在main方法里面写我们的测试代码:
public static void main(String[] args) {
  System.setProperty("webdriver.safari.driver","/Users/apple/Library/Safari/Extensions");
 
WebDriver driver = new SafariDriver();
  driver.get(
"http://www.autotestops.com");
  driver.manage().timeouts().pageLoadTimeout(
0, TimeUnit.SECONDS);

 
AutoTestOpsIndexPage indexPage = new AutoTestOpsIndexPage(driver);
  indexPage.GotoSearchPage();
 
AutoTestOpsSearchPage searchPage = new AutoTestOpsSearchPage(driver);
  System.
out.println("文章结果:"+searchPage.GetArticleCount());
}


这时我们即可得到我们的文章数的结果,这是一个最基本的用法,但以上代码故意留了一个不起眼的bug而且以上代码如果真正运用到工作中还需要很多优化 ,我们会在AutoTestOps Selenium专题课程中进行逐一深入讲解并且PageObject的真实用法还有很多,这里有很多是SuperXi自创的巧妙的PageObject高级玩法,其他机构能说清楚两种已经很不错了,想深入了解PageObject高级技法和想知道顶级专家是如何玩转PageObject的敬请报名参加我们AutoTestOps  selenium高级课程。



Happy auto testing!

SuperXi

 

版权声明:本文为AutotestOps原创文章,未经允许禁止转载。