我们目前正致力于在我们公司建立一个良好的测试框架。这是一个中型到大型的网络应用程序,可能只有几十个页面。我们目前主要编写基于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;
}
一个比另一个更可取吗?
发布于 2013-08-02 05:39:30
这是一个风格问题。
使用:
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-01 04:57:53
简短的答案是,如果您在同一个页面上,并且页面的状态没有变化,则不要返回相同的页面对象。如果从一个页面导航到另一个页面,则会返回新的页面对象。假设您想从页面中获取一些文本或选择一个选项,那么返回相同的对象是没有意义的,因为本质上没有什么变化。如果页面的状态正在更改,则需要返回新的页面对象,否则可能会面临StaleElementException
。在google docs中,如果您注意到LoginPage,getErrorMessage()
不会返回相同的页面对象
与您最初的问题有点不同,但如果您已经没有使用PageFactory,并且正在制定标准,那么我建议您使用your。
发布于 2015-04-20 15:21:18
我发现这样做非常容易维护。特别是在Java 8中。使用Java 8中的默认方法,组件和窗口小部件现在变成了Mixin。通过总是返回一个Page,您最终得到的测试用例如下所示:
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
https://stackoverflow.com/questions/17976491
复制相似问题