Не так давно пишу на Python + Webdriver +unittest.
Проблема в следующем.Везде написано, что писать зависимые друг от друга тесты плохо.
У меня на данном этапе есть проект, в корне которого куча файлов py.
Пытаюсь использовать PageObject подход.
Есть файл locators.py , в котором хранятся просто локаторы в виде FIELD_RECIVER =(By.CLASSNAME, "reciver")
Есть файл page.py, в котором хранится мой класс страницы с методами пример кода:
class BasePage(object):
``def __init__(self, driver):
self.driver = driver
class MainPage(BasePage):
def fill_field(self, locatror, text):
try:
WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located(locator)
).send_keys(text)
except TimeoutException:
raise Exception("Время появления поля ввода истекло.Не удалось ввести значение в поле ввода")
Есть собственно файл tests.py, в котором сами тесты в виде:
driver = None
def setUpModule():
global driver
driver = webdriver.Firefox()
driver.get("http://root:11111111@172.23.78.61")
class Reference_19_10_section_1_1_3(unittest.TestCase):
## Первый тест
def test_1_open_form(self):
main_page = page.MainPage(driver)
main_page.click_button(*Locators_19_10.REFERENCE_LINK)
time.sleep(1)
main_page.click_to_type_ref(*Locators_19_10.REFERENCE_19_10)
main_page.click_button(*Locators_19_10.BUTTON_CREATE_REFERENCE)
assert "Строка" in main_page.find_title_in_element(
*Locators_19_10.REFERENCE_TITLE_TEXT)
##Второй тест
def test_3_fill_reference_reciver(self):
main_page = page.MainPage(driver)
main_page.fill_field(locators_list_body_19_10[1], required_dict_for_body_19_10['reciver'])
assert u'Тестовый документ принял' in main_page.find_text_in_element(*Locators_19_10.REFERENCE_RECIVER)
То есть я получаю, что если не пройдет первый тест, то и второй тоже не пройдет потому, что он не увидит локатора.
Тест делает следующее: нажимает кнопку, появляется форма проверяется, что заголовок формы соответствует. Во втором тесте, заполняется поле "Получатель "в форме, которая появилась и проверка того, что в поле ввелось значение…
Как можно сделать их независимыми??Может я разбил на слишком маленькие тест кейсы и стоит заполнять полностью форму и потом, что-то проверять.В самой форме еще много кнопок, которые вызывают другие формы. И я стараюсь писать тест на каждое заполнение поля или каждый выбор из списка.
И еще маленький вопрос, как можно управлять порядком выполнения теста.? В unittest все выполняется по алфавиту. На данном этапе я пишу
def test_1
def test_9
def test__10 и тд.
и если падает какой-то из скажем так глобальных тестов, которые вызывает новую форму, то все тесты которые что то заполняют в ней тоже падают…