首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Page对象应该返回Page对象吗?

Page对象应该返回Page对象吗?
EN

Stack Overflow用户
提问于 2013-08-01 01:00:35
回答 4查看 5.3K关注 0票数 4

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

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

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

代码语言:javascript
运行
复制
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;

     }

一个比另一个更可取吗?

EN

回答 4

Stack Overflow用户

发布于 2013-08-02 05:39:30

这是一个风格问题。

使用:

代码语言:javascript
运行
复制
class SomePage {
    ...
    // always return a page object
    public SomePage fillInTextField(String val){
         ...
         return this; // Note: NOT "new SomePage(driver)"
    }
}

允许您编写如下内容:

代码语言:javascript
运行
复制
SomePage somePage = HoweverYouGetASomePage();
NextPage nextPage = somePage.fillInTextField1("value1").fillInTextField2("value2").submit();

使用:

代码语言:javascript
运行
复制
class SomePage {
    ...
    // only return a PO if it's a different page
    public void fillInTextField(String val){
        ...
        return;
    }
}

强迫你写一些类似这样的东西:

代码语言:javascript
运行
复制
SomePage somePage = HoweverYouGetASomePage();
somePage.fillInTextField1("value1");
somePage.fillInTextField2("value2");
NextPage nextPage = somePage.submit();

你喜欢哪一个取决于...你喜欢哪一个。但是如果你喜欢用来写前者,你需要总是返回这个页面对象。

票数 3
EN

Stack Overflow用户

发布于 2013-08-01 04:57:53

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-04-20 15:21:18

我发现这样做非常容易维护。特别是在Java 8中。使用Java 8中的默认方法,组件和窗口小部件现在变成了Mixin。通过总是返回一个Page,您最终得到的测试用例如下所示:

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17976491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档