使用selenium webdriver作为基类python

时间:2014-06-02 18:58:58

标签: python inheritance selenium webdriver base-class

我为这一个搜索了一会儿,我很惊讶我找不到任何东西,也许是因为它很简单。我已经在python中编程了大约3个月,使用selenium webdriver进行自动化测试。我认为让类继承自我的webdriver类以向其添加更多功能会很方便。

    from selenium import webdriver

    class myPage(webdriver):

          def __init__(self):
                super(myPage, self).__init__()

          def set_up(self):
                #doStuff...

但是当我这样做时,我得到错误>>>

    File "c:\Users\me\...\myProgram.py", line 6, in <module>
        class myPage(webdriver):
    TypeError: module.__init__() takes at most 2 arguments (3 given)

当我创建myPage对象时,代码是......

    from myProgram import myPage
    class Test():
          def do(self):
                self.browser = myPage.Firefox()

所以它通过并运行self.browser = myPage.Firefox()行,当它运行时。 __ init __ ()不知何故它给它三个参数,我不知道它们在哪里来自。我显然遗漏了一些东西,因为继承并不难。谢谢你的帮助

1 个答案:

答案 0 :(得分:8)

你必须改变:

class myPage(webdriver)

要:

class myPage(webdriver.Firefox)

但是,这会删除选择要运行它的浏览器的功能。这是因为webdriver实际上不是一个类,而是一个包(我相信)。当你调用类似:webdriver.Firefox()的东西时,它实际上是Firefox类的一个实例,而不是webdriver类。为了得到你想要的东西你最好做这样的事情:

from selenium import webdriver

class myPage(webdriver.Firefox, webdriver.Chrome, webdriver.Ie):
    def __init__(self, browser):
        if browser.lower() == "ie":
            webdriver.Ie.__init__(self)
        elif browser.lower() == "chrome":
            webdriver.Chrome.__init__(self)
        else:
            webdriver.Firefox.__init__(self)