Код-ревью Junior Ожидания и флаки обновлено

Ревью: ожидания в Selenium-тесте

Вопрос

Найдите проблемы с ожиданиями в тесте оплаты.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

def test_payment(driver):
    driver.implicitly_wait(10)
    driver.get("https://stage.shop.local/checkout")
    time.sleep(5)
    driver.find_element(By.ID, "card").send_keys("4111111111111111")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "pay")))
    driver.find_element(By.ID, "pay").click()
    time.sleep(3)
    assert "Оплачено" in driver.page_source

Коротко

Правильный вариант: неявное ожидание 0, явные ожидания конкретных состояний: поле видно, кнопка кликабельна, элемент статуса содержит нужный текст (EC.texttobepresentinelement). Никаких фиксированных пауз.

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

  1. Ошибкастрока 7
    Неявное ожидание вместе с явным: время ожидания становится непредсказуемым
  2. Производительностьстрока 9
    sleep(5) ждёт время, а не состояние: замедляет и не гарантирует готовность
  3. Ошибкастрока 11
    presence_of_element_located не значит, что кнопка видима и кликабельна; нужен element_to_be_clickable
  4. Ошибкастрока 13
    sleep(3) вместо ожидания результата оплаты
  5. Стильстрока 14
    Проверка по всему page_source: найдёт текст где угодно, лучше явное ожидание конкретного элемента статуса

Разбор

Правильный вариант: неявное ожидание 0, явные ожидания конкретных состояний: поле видно, кнопка кликабельна, элемент статуса содержит нужный текст (EC.text_to_be_present_in_element). Никаких фиксированных пауз.

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

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