📝 Задания: вопросы самопроверки
Вопросы экспресс-опроса из лекции Summary session 6. Попробуйте ответить сами — затем проверьте по Решениям.
⚡ Вопросы кратко
- Что такое POM и зачем он нужен?
- Как правильно организовать POM-проект?
- Какие основные ошибки допускают при использовании POM?
- Как обрабатывать динамически изменяющиеся элементы?
- Как упростить 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:
- Открыть saucedemo.com
- Авторизоваться как
standard_user - Проверить, что после входа URL =
https://www.saucedemo.com/inventory.html - Запомнить цены трёх товаров: Sauce Labs Backpack, Sauce Labs Bike Light, Sauce Labs Bolt T-Shirt
- Вывести цены в консоль
- Добавить эти товары в корзину
- Перейти в корзину
- Сравнить цены в корзине с ценами на странице Inventory
BaseTest и классы страниц.
Блок 4: Вопросы о фикстурах
Вопрос 10. В чём разница между
scope="function" и scope="class"? Когда каждый из них предпочтительнее?
Вопрос 11. Что означает
autouse=True в декораторе @pytest.fixture? Как он используется в BaseTest?
Вопрос 12. Почему при
scope="class" возникает проблема «грязного состояния» (dirty state)? Как её решить?