Код-ревью 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). Никаких фиксированных пауз.
Что должен найти ревьюер
- Ошибкастрока 7Неявное ожидание вместе с явным: время ожидания становится непредсказуемым
- Производительностьстрока 9sleep(5) ждёт время, а не состояние: замедляет и не гарантирует готовность
- Ошибкастрока 11presence_of_element_located не значит, что кнопка видима и кликабельна; нужен element_to_be_clickable
- Ошибкастрока 13sleep(3) вместо ожидания результата оплаты
- Стильстрока 14Проверка по всему page_source: найдёт текст где угодно, лучше явное ожидание конкретного элемента статуса
Разбор
Правильный вариант: неявное ожидание 0, явные ожидания конкретных состояний: поле видно, кнопка кликабельна, элемент статуса содержит нужный текст (EC.text_to_be_present_in_element). Никаких фиксированных пауз.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.