Webdriver是否支持Python的pagefactory?

2024-04-18 09:58:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Webdriver项目站点上阅读了page objects和设计模式,并遇到了pagefactory。它看起来不像Python API的Webdriver包含pagefactory。这是真的吗?


Tags: 项目apiobjects站点page设计模式webdriverpagefactory
3条回答

我创建了一个名为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/

像Python这样的动态类型语言对创建对象的设计模式不那么着迷,因为创建任何类型的对象(使用适当的方法)并返回它都非常简单。模式是解决常见问题的常用方法。如果某个东西不是问题,您不需要模式来处理它:-)OOP最初是C语言中的一个设计模式

编辑,2017年12月:

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

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

根据我的经验(使用Python、Selenium和WebDriver已经超过5年了),缺乏页面工厂模式是一个信号,表明您不需要它,而不是它不能实现。

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

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

相关问题 更多 >