📝 Задания: вопросы самопроверки

← К оглавлению урока

Вопросы экспресс-опроса из лекции Summary session 6. Попробуйте ответить сами — затем проверьте по Решениям.

⚡ Вопросы кратко

  1. Что такое POM и зачем он нужен?
  2. Как правильно организовать POM-проект?
  3. Какие основные ошибки допускают при использовании POM?
  4. Как обрабатывать динамически изменяющиеся элементы?
  5. Как упростить POM в больших проектах?

Блок 1: Концептуальные вопросы (экспресс-опрос из лекции)

Вопрос 1. Что такое Page Object Model (POM) и зачем он нужен?
Вопрос 2. Как правильно организовать Page Object Model в проекте? Опишите структуру папок и файлов.
Вопрос 3. Какие основные ошибки допускают при использовании POM? Назовите хотя бы три.
Вопрос 4. Как в POM обрабатывать динамически изменяющиеся элементы (те, что загружаются с задержкой)?
Вопрос 5. Как упростить работу с Page Object Model в больших проектах? Что такое BasePage и зачем нужен BaseTest?

Блок 2: Вопросы по коду

Вопрос 6. Найдите ошибку в следующем коде:
class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_input = driver.find_element(By.ID, "user-name")

    def enter_username(self, text):
        self.username_input.send_keys(text)
Почему этот подход приведёт к StaleElementReferenceException?
Вопрос 7. Что не так в этом классе тестов?
class TestLogin:
    @pytest.fixture(scope="class")
    def driver(self):
        d = webdriver.Chrome(...)
        yield d
        d.quit()

    def test_valid(self, driver):
        driver.find_element(By.ID, "user-name").send_keys("standard_user")
        driver.find_element(By.ID, "password").send_keys("secret_sauce")
        driver.find_element(By.ID, "login-button").click()
        assert "inventory.html" in driver.current_url
Вопрос 8. Что произойдёт, если не создать файл pages/__init__.py?

Блок 3: Практическое задание из лекции

Задание 9. Реализуйте тест, используя Page Object Model:
  1. Открыть saucedemo.com
  2. Авторизоваться как standard_user
  3. Проверить, что после входа URL = https://www.saucedemo.com/inventory.html
  4. Запомнить цены трёх товаров: Sauce Labs Backpack, Sauce Labs Bike Light, Sauce Labs Bolt T-Shirt
  5. Вывести цены в консоль
  6. Добавить эти товары в корзину
  7. Перейти в корзину
  8. Сравнить цены в корзине с ценами на странице Inventory
Структурируйте тест через BaseTest и классы страниц.

Блок 4: Вопросы о фикстурах

Вопрос 10. В чём разница между scope="function" и scope="class"? Когда каждый из них предпочтительнее?
Вопрос 11. Что означает autouse=True в декораторе @pytest.fixture? Как он используется в BaseTest?
Вопрос 12. Почему при scope="class" возникает проблема «грязного состояния» (dirty state)? Как её решить?