Я пытаюсь использовать один экземпляр Chrome / Firefox между методами, используя методы setUpClass()
и tearDownClass()
и декоратор @classmethod
. Он прекрасно работает с Chrome, но ошибка в Firefox . Вот среда:
- Win10 x64,
- Python 3.7.2,
- Пихарм 18,3,
- Селен 3.141.59,
- FireFox 64.0,
- geckodriver v0.23.0,
- Chrome V71.0.3578.98, 64-разрядная,
- ChromeDriver 2.45
Ожидаемые результаты для двух методов тестирования: 3 и 1. Тестовые прогоны с Chrome соответствуют ожиданиям, но не работают для Firefox.
import unittest
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities.FIREFOX
caps["marionette"] = True
class SearchTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
# create a new Firefox session
cls.driver = webdriver.Firefox(capabilities=caps, executable_path="my\geckodriver\path")
cls.driver.implicitly_wait(30)
cls.driver.maximize_window()
# create a new Chrome session
# cls.driver = webdriver.Chrome("my\chromedriver\path")
# cls.driver.implicitly_wait(30)
# cls.driver.maximize_window()
# navigate to the application home page
cls.driver.get("http://demo-store.seleniumacademy.com/")
def test_search_by_category(self):
# get the search textbox
self.search_field = self.driver.find_element_by_name("q")
self.search_field.clear()
# enter search keyword and submit
self.search_field.send_keys("phone")
self.search_field.submit()
# get all the anchor elements which have product names displayed
# currently on result page using find_elements_by_xpath method
products = self.driver.find_elements_by_xpath("//h2[@class='product-name']")
self.assertEqual(3, len(products))
def test_search_by_name(self):
# get the search textbox
self.search_field = self.driver.find_element_by_name("q")
self.search_field.clear()
# enter search keyword and submit
self.search_field.send_keys("salt shaker")
self.search_field.submit()
# get all the anchor elements which have product names displayed
# currently on result page using find_elements_by_xpath method
products = self.driver.find_elements_by_xpath("//h2[@class='product-name']")
self.assertEqual(1, len(products))
@classmethod
def tearDownClass(cls):
# close the browser window
cls.driver.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)
Ожидание выглядит следующим образом (закончено с Chrome):
test_search_by_category (main.SearchTests) ... ok
test_search_by_name (main.SearchTests) ... ok
----------------------------------------------------------------------
Ran 2 tests in 14.172s
OK
Но с Firefox всегда показывает:
test_search_by_category (main.SearchTests) ... ok
test_search_by_name (main.SearchTests) ... FAIL
FAIL: test_search_by_name (main.SearchTests)
Traceback (most recent call last):
File "G:\Thunder\PycharmProject\setests\searchtests.py", line 54, in test_search_by_name
self.assertEqual(1, len(products))
AssertionError: 1 != 3
----------------------------------------------------------------------
Ran 2 tests in 13.568s
FAILED (failures=1)
Я полагаю, потому что селен, запущенный под firefox, не смог запустить 2-й метод тестирования и, таким образом, он использует предыдущее значение len(products)
для сравнения с ожиданием "1".