2011-12-12 50 views

回答

5

我不认为在Python中有Java注释(@Find(By.xxx)等)的任何等价物。但这并不意味着你不能使用PageObject模式。

你可以找到如何在这里做的很好的例子:https://github.com/SeleniumHQ/selenium/blob/master/py/test/selenium/webdriver/common/google_one_box.py

+4

链接已更改为https://code.google.com/p/selenium/source/browse/py/test/selenium/webdriver/common/google_one_box.py – abhi

+0

链接已重新更新为https://github.com/ SeleniumHQ /硒/斑点/主/ PY /测试/硒/ webdriver的/普通/ google_one_box.py – Deep

4

动态类型语言如Python不太痴迷的设计模式来创建对象 - 因为它是十分容易只是创建任何类型的对象(正确方法)并返回它。模式是常见问题的常见解决方案。如果事情是没有问题的,你并不需要一个模式来解决它:-) OOP最初在C.

设计模式

编辑,2017年12月:

在我们自主开发的框架页面自动化(用于自动UI测试和其他目的),我们确实使用pageobject设计模式,但不需要页面工厂。我们定制的BasePage的老派继承覆盖了我们所有(相当多样化)的需求。我们使用一些技巧来创建页面元素,并确保正确的页面被实例化,并且基于这样的经历,我喜欢我们的PageObject是简单的。

此外,如果您的需求变得更加复杂,Python允许多继承。

根据我的经验(现在使用Python,Selenium和WebDriver超过5年),页面工厂模式的缺乏是您不需要它的标志,并非它无法实现。

1

我创建了一个名为pageobject_support的模块,它以pythonic的方式实现PageFactory模式。

from pageobject_support import cacheable, callable_find_by as find_by 
from selenium.webdriver.common.by.By 

class GoogleSearchPage(object): 

    _search_box = find_by(how=By.NAME, using='q', cacheable=True) 

    _search_button = find_by(name='btnK') 

    def __init__(self, driver): 
     self._driver = driver 

    def search(self, keywords): 
     self._search_box().click() 
     self._search_box().send_keys(keywords) 
     self._search_button().click() 

您的宝贵意见:

有了这个模块,如下谷歌搜索页面可以近似。有关更多详细信息,请访问https://jeremykao.wordpress.com/2015/06/10/pagefactory-pattern-in-python/