Java Selenium WebDriver页面对象导航最佳实践

Java Selenium WebDriver页面对象导航最佳实践,java,selenium-webdriver,helper,pageobjects,Java,Selenium Webdriver,Helper,Pageobjects,大多数情况下,我使用基于Java的页面对象/页面工厂方法实现框架,并希望改进现有的代码库 我的问题是: 我的方法是返回页面对象。(返回PageFactory.initelements(…);我读过一些评论,这不是最好的方法,因为所有的测试都取决于框架开发人员。我相信,通用方法会更好!有什么建议吗 导航模块在每个页面上都是通用的,所以我的想法是使用helper/utility类,以便轻松获得通用的导航方法。常见的静态方法是实现“不要重复自己的目标”的正确方法吗?为什么我要在每个页面对象上重复所有

大多数情况下,我使用基于Java的页面对象/页面工厂方法实现框架,并希望改进现有的代码库

我的问题是:

  • 我的方法是返回页面对象。(返回PageFactory.initelements(…);我读过一些评论,这不是最好的方法,因为所有的测试都取决于框架开发人员。我相信,通用方法会更好!有什么建议吗

  • 导航模块在每个页面上都是通用的,所以我的想法是使用helper/utility类,以便轻松获得通用的导航方法。常见的静态方法是实现“不要重复自己的目标”的正确方法吗?为什么我要在每个页面对象上重复所有导航方法

如有任何建议,将不胜感激


谢谢。

Q1。我也使用页面对象模型,但从未实现页面对象的返回。我不知道。。。我只是不喜欢这个主意。我不认为这一定是坏事,我认为这只是意味着你必须创建更多的方法来做同样的事情。您必须执行许多方法中的两种,一种用于预期成功,另一种用于预期失败,例如
Login()
FailedLogin()


问题2。页面对象不必是页面。我有页眉和页脚页面对象,其中包含页眉和页脚导航链接等。在多个页面上重复的页面部分进入页眉页面对象。每当我到达任何页面并需要在页眉区域中添加内容时,我都会实例化页眉对象并使用它。

嗨,JeffC,谢谢!问题2:这是个好主意,但我如何才能实现它?我有带有实例化的BasePage(webdriver、数据库连接器等)和一些常用方法,例如customClick、Select、使用自定义等待方法的列表处理程序等。每个pageobject都扩展了BasePage。cna I如何使用每个页面上常见的导航对象?它应该扩展basePage吗?任何想法都将不胜感激!听起来页面对象中的内容比应该的要多得多。请记住,页面对象应该包含与所讨论的页面相关的内容。它不应该包含诸如通用方法、数据库连接器之类的内容。这些应该在其他地方的一些Utils类中,以便在需要时调用它。您可以在codereview.stackexchange.com上发布代码,并在那里获得一些反馈。@brobee如果您在CR上发布,请确保包含所有代码。CR只审查真实代码,而不是示例代码。Jeff,我所有的页面对象都只代表特定的页面。我提到了basepage,它是抽象的顶部,每个页面都扩展了它。UTIL类大多是带有静态方法的静态类,我听说这是一个糟糕的概念,这就是为什么我没有创建用于导航的静态方法。在这种情况下,utils类对于公共导航有意义吗?谢谢很遗憾,我无法复制粘贴我的代码。当您的页面对象继承basepage时,它们将采用这些方法。基本页面不应该包含我上面列出的内容。不表示页面上的某些操作的方法不应位于页面对象中,而应位于某些Utils类中。静态类没有什么错。。。许多公共库都有Utils类。我在回答中提到的常见导航。