Python 是否可以为所有LiveServerTestCases登录一次?
我想这样做:Python 是否可以为所有LiveServerTestCases登录一次?,python,selenium,liveservertestcase,Python,Selenium,Liveservertestcase,我想这样做: class TestSuite(LiveServerTestCase): @classmethod def setUp(self): self.driver = webdriver.Chrome() # Login User self.driver.get(self.live_server_url + '/somesite/login/') self.driver.find_elem
class TestSuite(LiveServerTestCase):
@classmethod
def setUp(self):
self.driver = webdriver.Chrome()
# Login User
self.driver.get(self.live_server_url + '/somesite/login/')
self.driver.find_element(By.ID, "username").click()
self.driver.find_element(By.ID, "username").send_keys("foo")
self.driver.find_element(By.ID, "password").click()
self.driver.find_element(By.ID, "password").send_keys("bar")
self.driver.find_element(By.ID, "login_button").click()
# Redirects to home page
@classmethod
def tearDown(self):
self.driver.quit()
def test_foo(self):
# Do some clicking with already logged in user from home page
def test_bar(self):
# Do some clicking with already logged in user from home page
我只是觉得在每个测试用例上调用setUp()效率很低
非常感谢您的帮助……因此,请将
安装程序
从TestSuite
移动到LiveServerTestCase类我讨厌回答我自己的问题。。。但多亏了奥利·卡恩的提示——扩展LiveServerTestCase
,我才让它工作起来
步骤:
class TestSuite(LiveServerTestCase):
@classmethod
def setUpClass(cls):
super(TestSuite, cls).setUpClass()
cls.driver = webdriver.Chrome()
# Login User
cls.driver.get(cls.live_server_url + '/somesite/login/')
cls.driver.find_element(By.ID, "username").click()
cls.driver.find_element(By.ID, "username").send_keys("foo")
cls.driver.find_element(By.ID, "password").click()
cls.driver.find_element(By.ID, "password").send_keys("bar")
cls.driver.find_element(By.ID, "login_button").click()
# Redirects to home page
@classmethod
def tearDownClass(cls):
cls.driver.quit()
super(TestSuite, cls).tearDownClass()
def test_foo(self):
# Do some clicking with already logged in user from home page
def test_bar(self):
# Do some clicking with already logged in user from home page
- 使用
setUpClass
/tearDownClass
(而不是setUp
/tearDown
)
- 将
setUpClass
/tearDownClass
声明为@classmethods
(如果使用更多装饰器,请将@classmethod
放在第一位)
- 使用
super()
扩展LiveServerTestCase
- 对于
@classmethod
,使用cls
而不是self
,以符合PEP8
完整代码:
class TestSuite(LiveServerTestCase):
@classmethod
def setUpClass(cls):
super(TestSuite, cls).setUpClass()
cls.driver = webdriver.Chrome()
# Login User
cls.driver.get(cls.live_server_url + '/somesite/login/')
cls.driver.find_element(By.ID, "username").click()
cls.driver.find_element(By.ID, "username").send_keys("foo")
cls.driver.find_element(By.ID, "password").click()
cls.driver.find_element(By.ID, "password").send_keys("bar")
cls.driver.find_element(By.ID, "login_button").click()
# Redirects to home page
@classmethod
def tearDownClass(cls):
cls.driver.quit()
super(TestSuite, cls).tearDownClass()
def test_foo(self):
# Do some clicking with already logged in user from home page
def test_bar(self):
# Do some clicking with already logged in user from home page
为了改进答案,请解释一下解决问题的原因谢谢@olli_kahn提供的意见。我不想弄乱第三方模块,但如果我理解正确,可以通过扩展LiveServerTestCase
;它应该会起作用。那么在这种情况下,super()
会起作用吗?如果是,我将如何实施?