4

我们目前正致力于在我们公司建立一个良好的测试框架。它适用于中型到大型网络应用程序,可能有几十页。我们目前主要编写基于 WebDriver Selenium UI 的测试。

我们正在尝试确定一些编码标准,我们正在讨论的一件事是是否使用始终返回 PO(即使页面相同)的页面对象 (PO),仅在您离开当前页面时返回 PO一个新的,甚至不返回 PO。我一直认为返回 PO 是 PO 设计模式的一个关键特性,但我对此可能不正确。

基本上,我们试图在以下模式之间做出决定:

class SomePage {
     // constructor
     public SomePage(Driver) { //... } 

     // always return a page object
     public SomePage fillInTextField(String val){
          // details
          return new SomePage(driver);

     // only return a PO if it's a different page
     public void fillInTextField(String val){
          // details
          return;

     }

一个比另一个更可取吗?

4

4 回答 4

3

这是风格问题。

使用:

class SomePage {
    ...
    // always return a page object
    public SomePage fillInTextField(String val){
         ...
         return this; // Note: NOT "new SomePage(driver)"
    }
}

允许您编写如下内容:

SomePage somePage = HoweverYouGetASomePage();
NextPage nextPage = somePage.fillInTextField1("value1").fillInTextField2("value2").submit();

使用:

class SomePage {
    ...
    // only return a PO if it's a different page
    public void fillInTextField(String val){
        ...
        return;
    }
}

强迫你写这样的东西:

SomePage somePage = HoweverYouGetASomePage();
somePage.fillInTextField1("value1");
somePage.fillInTextField2("value2");
NextPage nextPage = somePage.submit();

你喜欢哪一个取决于……你喜欢哪一个。但是,如果您希望能够编写前者,则需要始终返回页面对象。

于 2013-08-01T21:39:30.400 回答
1

简短的回答是,如果您在同一页面上并且页面状态未更改,则不要返回相同的页面对象。如果您从一个页面导航到另一个页面,您将返回新的页面对象。当假设您想要获取一些文本或从页面中获取选定的选项时,返回相同的对象是没有意义的,因为基本上没有任何改变。如果页面的状态正在改变,那么您需要返回新的页面对象,否则您可能会面临StaleElementException. 在google docs中,如果您注意到 LoginPage,getErrorMessage()则不会返回相同的页面对象

与您最初的问题有些不同,但如果您已经不是并且正在制定标准,我建议您使用PageFactory 。

于 2013-07-31T20:57:53.393 回答
1

我发现这样做非常易于维护。尤其是 Java 8。使用 Java 8 中的默认方法,组件和小部件现在变成了 Mixins。通过总是返回一个页面,您最终会得到如下所示的测试用例:

public class HomePageITest {
  @Test
  public we_should_be_able_to_search_from_the_homepage() {
    pageFactory.getHomePage()
      .get()
      .doSomethingOnTheHomePage()
      .clickSearchWidgetSubmitButton()
      .doSomethingElseOnTheHomePage()      
    ;
  }
}

我有一篇博客文章在这里更详细地描述了这一点:http: //blog.jsdevel.me/2015/04/pageobjects-done-right-in-java-8.html

于 2015-04-20T07:21:17.743 回答
1

正如PageObject Selenium 帮助页面所说“方法返回其他 PageObjects”

于 2018-07-25T15:04:42.937 回答