【问题标题】:How to set up driver globally for selenium tests from setUp method in unittest如何从 unittest 中的 setUp 方法为硒测试全局设置驱动程序
【发布时间】:2016-11-25 06:35:42
【问题描述】:

您能否解释一下,为什么 DRIVER 在装饰器 auto_login 中等于 None。但是当我从 setUp 和 auto_login 方法打印它时,来自 setUp 方法的 DRIVER 在输出中首先出现。 以及如何从 setUp 方法全局设置驱动程序。

DRIVER = None

class BaseTest(unittest.TestCase):
    def setUp(self):
        global DRIVER
        DRIVER = webdriver.Firefox()
        print("DRIVER setUp: ", DRIVER)

    def tearDown():
        .....

和装饰器

def auto_login(email, password):
    def create_dec(func):
        def wrapper(*args, **kwargs):
            print("DRIVER IN DEC: ", DRIVER)
            login(DRIVER, email, password)
            func(*args, **kwargs)
        return wrapper
    return create_dec

这就是我使用装饰器进行测试的方式

class Test(BaseTest):

EMAIL = "xxx@gmail.com"
PASSWORD = "xxxxx"
@auto_login(email=EMAIL, password=PASSWORD)
    def test_1(self):
         ......

输出:

DRIVER setUp:  <selenium.webdriver.firefox.webdriver.WebDriver (session="e1f7fa5fa4137305c4587535b20b849c")>
DRIVER IN DEC:  None

【问题讨论】:

    标签: python selenium python-unittest


    【解决方案1】:

    您似乎没有在范围内定义DRIVER

    def auto_login(email, password):
        def create_dec(func):
            def wrapper(*args, **kwargs):
    
                global DRIVER # <--- What happens if you add this line?
    
                print("DRIVER IN DEC: ", DRIVER)
                login(DRIVER, email, password)
                func(*args, **kwargs)
            return wrapper
        return create_dec
    

    【讨论】:

    • 是的,没有帮助
    【解决方案2】:

    试试这个

    DRIVER = None
    class BaseTest(unittest.TestCase):
        def setUp(self):
            global DRIVER
            DRIVER = webdriver.Firefox()
            self.DRIVER=DRIVER 
            print("DRIVER setUp: ", DRIVER)
            return DRIVER
    
        def tearDown():
            .....
    

    在你的测试课中

    class Test(BaseTest):
    DRIVER=BaseTest.DRIVER
    
    EMAIL = "xxx@gmail.com"
    PASSWORD = "xxxxx"
    @auto_login(email=EMAIL, password=PASSWORD)
        def test_1(self):
             ......
    

    【讨论】:

    • 显示错误`AttributeError: type object 'BaseTest' has no attribute 'DRIVER'`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多