2016-11-25 40 views
0

请解释一下为什么DRIVER在decorator auto_login中等于None。但是,从setUp和auto_login方法打印它时,setUp方法中的DRIVER先输出。 如何从setUp方法全局设置驱动程序。如何在unittest中通过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 = "[email protected]" 
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

好像你不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 
+0

是,它并没有帮助 –

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 = "[email protected]" 
PASSWORD = "xxxxx" 
@auto_login(email=EMAIL, password=PASSWORD) 
    def test_1(self): 
     ...... 
+0

它显示错误'AttributeError的:对象类型 'BaseTest' 有没有属性“DRIVER “' –

相关问题