Код-ревью Middle Page Object и архитектура обновлено

Ревью: Page Object корзины

Вопрос

Найдите проблемы в Page Object.

class CartPage(BasePage):
    def __init__(self, driver):
        super().__init__(driver)
        self.items = driver.find_elements(By.CSS_SELECTOR, ".cart-item")
        self.checkout_btn = driver.find_element(By.XPATH, "/html/body/div/div[2]/button")

    def click_button_2(self):
        time.sleep(2)
        self.checkout_btn.click()

    def remove_first(self):
        self.items[0].find_element(By.CSS_SELECTOR, ".remove").click()
        assert len(self.driver.find_elements(By.CSS_SELECTOR, ".cart-item")) == len(self.items) - 1

Коротко

Хороший вариант: локаторы в полях класса, элементы ищутся при обращении, метод checkout() ждёт кликабельности и возвращает CheckoutPage, removeitem(name) удаляет конкретную позицию, а тест сам ждёт и проверяет количество.

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

  1. Ошибкастрока 4
    Элементы ищутся в конструкторе: после изменения корзины ссылки протухнут, а если корзина ещё грузится, список будет пустым
  2. Ошибкастрока 5
    Абсолютный XPath
  3. Стильстрока 7
    Имя метода описывает технику, а не действие пользователя (checkout)
  4. Ошибкастрока 8
    sleep внутри Page Object
  5. Стильстрока 9
    Переход к оформлению не возвращает объект следующей страницы
  6. Ошибкастрока 13
    Проверка внутри действия и без ожидания: метод нельзя использовать в других сценариях, а сразу после клика список ещё не обновился

Разбор

Хороший вариант: локаторы в полях класса, элементы ищутся при обращении, метод checkout() ждёт кликабельности и возвращает CheckoutPage, remove_item(name) удаляет конкретную позицию, а тест сам ждёт и проверяет количество.

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

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

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