如何在大型应用中处理Selenium POM;最佳实践?

如何在大型应用中处理Selenium POM;最佳实践?,selenium,Selenium,我正在为一个包含大量选择器和操作的页面的复杂应用程序编写一些selenium测试,发现自己不同意POM(页面对象模型)方法的某些部分 正如POM模式所描述的,我们已经编写了一个页面“库”,其中包含我们所有的标识符和方法,我们的测试根本不了解实际页面(selenium驱动程序)。这些操作允许您编写这样的代码,这是单个页面的一部分: class SomePage(MyBasePOM): .... def open_event_detail(self): &

我正在为一个包含大量选择器和操作的页面的复杂应用程序编写一些selenium测试,发现自己不同意POM(页面对象模型)方法的某些部分

正如POM模式所描述的,我们已经编写了一个页面“库”,其中包含我们所有的标识符和方法,我们的测试根本不了解实际页面(selenium驱动程序)。这些操作允许您编写这样的代码,这是单个页面的一部分:

 class SomePage(MyBasePOM):

     ....

     def open_event_detail(self):
         """Open Event detail pane"""
         self.driver.find_element(*self.EVENT_DETAIL_BUTTONS).click()
         return EventDetailsPage(self.driver).ready()

     def get_search_query(self):
         """Get search query from search bar"""
         return self.driver.find_element(*self.SEARCH_BAR).get_attribute("value")

     def get_column_names(self):
         """Return column header of event table"""
         return [e.text for e in self.driver.find_elements(*self.COLUMN_HEADER)]

     def get_collector_name(self):
         """Return name of collector"""
         return self.driver.find_element(*self.COLLECTOR_NAME).text

    ....
这些只是本页上许多单行程序方法中的几个。这些方法中的每一个都只由单个测试调用(所有不同的测试)。我认为这种方法让事情变得非常复杂,因为现在我们的单个页面可能有50多个附加的不同方法,它们只点击一个东西,或者在屏幕上的某个地方获取一些文本值的内容,或者其他一些无关紧要的动作。这意味着,如果一个新的开发人员进来并想要编写一个测试,他们已经在页面上附加了50多个方法,他们需要查看这些方法,看看是否有人已经实现了一些可以点击或获取他们想要的内容的东西。我们已经看到了这些重复的情况开始发生,因为人们写下了稍微不同的方法来做这样的简单动作

所以,尽管如此

我的问题是,这真的是最好的方法吗?在我看来,让个人测试关注
收集器名称的内容将更有意义。然后,该测试将获得该内容本身,而不是编写一个单行方法,该方法现在附加到使用该页面的所有其他测试中


我知道这会“破坏”POM,这意味着如果有什么变化,您需要更新测试而不是POM,但在这里的这些示例中,这些方法只在一个测试中使用(在其中一个示例中是简单的
self.assertEqual(“foobar”,some\u page.get\u collector\u name())
)-这意味着只有一个地方需要更新!对于复杂的动作,我完全理解POM的价值,但这对我来说似乎太过分了

我想你已经回答了你自己的问题。不,这不是最好的办法。DWMS(做有意义的事)是公平的,尽管我认为其中的一部分只是术语问题。“第页”应替换为“可重复使用的程序”