Всем добрый день.
Прошу совет профессионалов.
Я только начал изучать автоматизацию.
Python + Selenium
Написал тесты, но они нестабильны. Некоторые тесты то запускаются, то не запускаются. Страница не прогружается. Те тесты которые упали при первом запуске, запустились во втором и т.д.
Подскажите пожалуйста на что обратить внимание, для того, чтобы наладить стабильность.
Заранее благодарен!
tests
@pytest.mark.parametrize('login, password', [ ('admin', 'Admin123'), ('admin', 'admin'), ('Admin', 'Admin'), ('admin', 'Admin1234'), ('Admin1', 'admin123'), ('admin', 'Admin1234') ]) def test_login_invalid(self, driver, login, password): """ 1. Открытие страницы 2. Ввод логина и пароля в нижнем регистре 3. Проверка, что в ответе сервера обнаруживается ошибка :param driver: Webdriver для управления браузером :param url: Открытие страницы авторизации :return: None """ url = 'https://opensource-demo.orangehrmlive.com/web/index.php/auth/login' login_page = LoginPage(driver, url) login_page.open() login_page.enter_username(login) login_page.enter_password(password) login_page.click_login_button() message = login_page.check_error_message_visible() assert message.text == 'Invalid credentials'
login_page
NAME_FIELD_SELECTOR = (By.CSS_SELECTOR, '.oxd-input[name="username"]') PASSWORD_FIELD_SELECTOR = (By.CSS_SELECTOR, '.oxd-input[name="password"]') LOGIN_BUTTON_SELECTOR = (By.CSS_SELECTOR, 'button[type="submit"]') ERROR_MESSAGE_SELECTOR = (By.CSS_SELECTOR, 'p[class$="alert-content-text"]') def enter_username(self, username): """ Ввод имени пользователя в поле Username :param username: Имя пользователя """ self.is_element_visible(self.NAME_FIELD_SELECTOR, 30).send_keys(username) def enter_password(self, password): """ Ввод пароля в поле Password :param password: Пароль аутентификации """ self.is_element_visible(self.PASSWORD_FIELD_SELECTOR, 30).send_keys(password) def click_login_button(self): """ Клик по кнопке входа в систему """ self.is_element_visible(self.LOGIN_BUTTON_SELECTOR, 30).click() def check_error_message_visible(self): """ Поиск ErrorMessage и его видимости :return: WebElement """ return self.is_element_visible(self.ERROR_MESSAGE_SELECTOR, 30)
base_page
class BasePage: """ Класс для выполнения тестовых операций. Конструктор принимает драйвер и URL-адрес для управления браузером и навигации по страницам. """ def __init__(self, chrome_driver, url): self.chrome_driver = chrome_driver self.url = url def open(self): """ Opening the specified URL in the browser """ self.chrome_driver.get(self.url) def is_element_visible(self, locator, timeout=10): """ Проверка видимости элемента на странице :param locator: локатор, используемый для поиска элемента. :param timeout: Максимальное время ожидания отображения элемента. :return Веб-элемент, как только он будет найден и виден. """ return Wait(self.chrome_driver, timeout).until((EC.visibility_of_element_located(locator)))