学习Selenium,Python页面对象问题

问题描述

我目前正在阅读有关硒的文档。 docs这部分让我有些困惑。 Perticuallary是基础页面的一部分。描述如下:

class BasePage(object):
    """Base class to initialize the base page that will be called from all pages"""

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

但是,如果这是所有类的父级,则是假设。实例化驱动程序并将驱动程序的方法包装到更合适的代码中不是此类的责任吗?我的意思是这样:

class BasePage(object):

    def __init__(self):
        self.driver = webdriver.Firefox()

    def findElementsByCss(self,selector):
        return self.driver.find_element_by_css_selector(selector)

    def visit(self,url):
        return self.driver.get(url)

然后其他页面无需了解驱动程序,而只需

class FrontPage(BasePage):

    def searchForItem(self,item)
        return findElementsByCss(".input").send_keys( "hey" )

因此现在只需访问首页搜索项目就非常简单。这是正确的想法还是我感到困惑?

解决方法

将webdriver用作类构造函数的参数使其更加通用。 您可以:

firefox_driver = webdriver.Firefox()
firefox_browser = BasePage(firefox_driver)
chrome_driver = webdriver.Chrome() (I hope that this method works)
chrome_browser = BasePage(chrome_driver)

您无需为Firefox和Chrome创建两个不同的类。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...