Код-ревью 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.

Что должен найти ревьюер

  1. Ошибкастрока 2
    Драйвер создаётся в теле теста, а quit() в конце: при падении браузер не закроется, нужна фикстура с teardown
  2. Ошибкастрока 6
    Элементы строк найдены до сортировки и используются после неё: StaleElementReferenceException
  3. Стильстрока 6
    Выбор строки по индексу вместо поиска по содержимому
  4. Ошибкастрока 8
    Клик через JavaScript обходит проверки видимости и перекрытия, может скрыть баг
  5. Ошибкастрока 9
    Тост проверяется без явного ожидания: тест будет флакать
  6. Ошибкастрока 3
    Нет подготовки и авторизации: тест зависит от состояния стенда

Разбор

Правильно: драйвер из фикстуры с yield и quit() в teardown, после сортировки строки искать заново по тексту, обычный клик с ожиданием кликабельности, проверка тоста через WebDriverWait и text_to_be_present_in_element.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме