Всем добрый день.
Прошу совет профессионалов.
Я только начал изучать автоматизацию.
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)))