#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_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() в каждом тестовом примере.
Любая помощь была бы оценена, спасибо…
Ответ №1:
итак, перейдите setUp
из TestSuite
в LiveServerTestCase
класс
Комментарии:
1. чтобы улучшить ответ, пожалуйста, дайте некоторое объяснение причины, по которой это устраняет проблему
2. спасибо @olli_kahn за ваш вклад. Я не хочу связываться со сторонними модулями, но, если я вас правильно понимаю, путем расширения
LiveServerTestCase
; это должно сработать. Так будетsuper()
работать в этом случае? Если да, то как бы я это реализовал?
Ответ №2:
Я ненавижу отвечать на свой собственный вопрос… но у меня получилось благодаря расширению подсказки olli_kahn LiveServerTestCase
.
Шаги:
- Используйте
setUpClass
/tearDownClass
(неsetUp
/tearDown
) - Объявите
setUpClass
/tearDownClass
как@classmethods
(ставьте@classmethod
первым, если используете больше декораторов) - Используйте
super()
для расширенияLiveServerTestCase
- Используйте
cls
вместоself
for@classmethod
‘s для соответствия 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