Код-ревью Middle Selenium и WebDriver обновлено
Ревью: Selenium-тест профиля
Вопрос
Найдите проблемы в тесте.
def test_edit_profile():
driver = webdriver.Chrome()
driver.get("https://stage.app.local/profile")
rows = driver.find_elements(By.CSS_SELECTOR, "table tr")
driver.find_element(By.ID, "sort-by-name").click()
rows[1].find_element(By.TAG_NAME, "button").click()
save = driver.find_element(By.XPATH, "//button[text()='Сохранить']")
driver.execute_script("arguments[0].click()", save)
assert driver.find_element(By.CLASS_NAME, "toast").text == "Сохранено"
driver.quit()
Коротко
Правильно: драйвер из фикстуры с yield и quit() в teardown, после сортировки строки искать заново по тексту, обычный клик с ожиданием кликабельности, проверка тоста через WebDriverWait и texttobepresentinelement.
Что должен найти ревьюер
- Ошибкастрока 2Драйвер создаётся в теле теста, а quit() в конце: при падении браузер не закроется, нужна фикстура с teardown
- Ошибкастрока 6Элементы строк найдены до сортировки и используются после неё: StaleElementReferenceException
- Стильстрока 6Выбор строки по индексу вместо поиска по содержимому
- Ошибкастрока 8Клик через JavaScript обходит проверки видимости и перекрытия, может скрыть баг
- Ошибкастрока 9Тост проверяется без явного ожидания: тест будет флакать
- Ошибкастрока 3Нет подготовки и авторизации: тест зависит от состояния стенда
Разбор
Правильно: драйвер из фикстуры с yield и quit() в teardown, после сортировки строки искать заново по тексту, обычный клик с ожиданием кликабельности, проверка тоста через WebDriverWait и text_to_be_present_in_element.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.