使用selenium webdriver作为基类python

Rec*_*Dan 7 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...
Run Code Online (Sandbox Code Playgroud)

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

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

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

    from myProgram import myPage
    class Test():
          def do(self):
                self.browser = myPage.Firefox()
Run Code Online (Sandbox Code Playgroud)

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

小智 9

你必须改变:

class myPage(webdriver)
Run Code Online (Sandbox Code Playgroud)

至:

class myPage(webdriver.Firefox)
Run Code Online (Sandbox Code Playgroud)

但是,这将删除选择要运行它的浏览器的功能.这是因为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)
Run Code Online (Sandbox Code Playgroud)