Я хочу немного расширить ответ @sarthak.В примере кода используются методы setUpClass
и tearDownClass
.Эти методы вызываются для подготовки класса теста и вызываются только один раз перед выполнением всех тестов в вашем классе теста.
Что может работать в вашем случае, потому что в начале каждого теста вы перезаписываете внутреннее состояние driver
объект и ваше предыдущее выполнение теста не должны влиять на ваш следующий результат теста.В этом случае вам нужно изменить свои тесты, чтобы использовать объект класса:
def test_search_automationstepbystep(self):
TestClass.driver.get("https://google.com")
TestClass.driver.find_element_by_name("q").send_keys("Automation Step By step")
TestClass.driver.find_element_by_name("btnk").click()
def test_search_naresh(self):
TestClass.driver.get("https://google.com")
TestClass.driver.find_element_by_name("q").send_keys("Naresh")
TestClass.driver.find_element_by_name("btnk").click()
Где TestClass
- это имя вашего класса теста.
Другой вариант - использовать setUp
и tearDown
методы для инициализации объекта driver
перед каждым тестовым примером:
def setUp(self):
self.driver = webdriver.Chrome(chrome_options=options)
self.driver.implicitly_wait(10)
self.driver.maximize_window()
def tearDown(self):
self.driver.close()
self.driver.quit()
print("Test completed")
Оба метода setUp
и tearDown
принимают экземпляр TestClass
в качестве аргумента self
, и ваши тесты должны работатьбез каких-либо дополнительных изменений.
Примечание. Обычно для модульного тестирования предпочтительнее второй вариант, так как вам не нужно проверять в каждом тесте, что вы перезаписываете driver
внутреннее состояние перед использованием find_element_by_name
,А во втором варианте вы можете поместить self.driver.get("https://google.com")
код в метод setUp, потому что он все равно будет выполняться перед каждым тестовым примером.