如何在unittest中使用setUp方法为selenium测试设置全局驱动程序

时间:2016-11-25 06:35:43

标签: python selenium python-unittest

请你解释一下,为什么在装饰器auto_login中DRIVER等于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

2 个答案:

答案 0 :(得分:0)

您似乎没有在范围内定义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

答案 1 :(得分:0)

试试这个

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):
         ......