请你解释一下,为什么在装饰器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
答案 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):
......