Conversation
.pytest_cache/v/cache/nodeids
Outdated
| @@ -0,0 +1,15 @@ | |||
| [ | |||
There was a problem hiding this comment.
Необходимо исправить: эта директория лишняя в проекте. Необходимо убрать её из ветки и добавить в .gitignore в корне проекта
| ORDER_BUTTON_TOP = (By.XPATH, "//button[contains(text(), 'Заказать')]") | ||
| ORDER_BUTTON_BOTTOM = (By.XPATH, "//button[contains(text(), 'Заказать')]") |
There was a problem hiding this comment.
Необходимо исправить: эти локаторы идентичны. Стоит привязаться к уникальным атрибутам этих элементов или их родителей
pages/base_page.py
Outdated
|
|
||
|
|
||
| class BasePage: | ||
| BASE_URL = "https://qa-scooter.praktikum-services.ru/" |
There was a problem hiding this comment.
Можно лучше здесь и далее: адреса лучше вынести во внешний модуль(например, urls). Они могут измениться, что затруднит поддержку тестов
pages/base_page.py
Outdated
| def __init__(self, driver): | ||
| self.driver = driver | ||
|
|
||
| def find_element(self, locator, time=10): |
There was a problem hiding this comment.
Необходимо исправить здесь и далее: не хватает аннотации allure для шага - allure.step
pages/main_page.py
Outdated
|
|
||
| # Локаторы для кнопок заказа | ||
| ORDER_BUTTON_TOP = (By.XPATH, "//button[@class='Button_Button__ra12g']") | ||
| ORDER_BUTTON_BOTTOM = (By.XPATH, "(//button[text()='Заказать'])[2]") |
There was a problem hiding this comment.
Необходимо исправить здесь и далее: не стоит использовать в локаторах путь от рута, абсолютный путь или индексы элемента. Это делает локатор очень хрупким
| @@ -0,0 +1,9 @@ | |||
| from locators.main_page_locators import MainPageLocators | |||
|
|
|||
| class MainPageLocators: | |||
There was a problem hiding this comment.
Необходимо исправить: классы этого пакета нигде не используются
pages/main_page.py
Outdated
| for domain in ['dzen.ru', 'yandex.ru', 'ya.ru']: | ||
| if self.wait_for_url_contains(domain, timeout=5): | ||
| return True | ||
|
|
There was a problem hiding this comment.
Необходимо исправить: проверка для теста получилась не атомарной. Стоит проверять редирект на конкретный адрес
tests/test_order.py
Outdated
| if order_button == "top": | ||
| main_page.click_order_button_top() | ||
| else: | ||
| main_page.click_order_button_bottom() |
There was a problem hiding this comment.
Нужно исправить: использование условных блоков в теле теста лишает их атомарности. Можно попробовать, например, расширить количество параметров или их переработать дабы избежать этой ситуации. Если не получается объединить их все, то отдельные можно разместить отдельно исключив из параметризации
tests/test_order.py
Outdated
| assert main_page.check_yandex_redirect_url(), "Не открылась страница Яндекса/Дзена" | ||
|
|
||
| # Закрываем новое окно и возвращаемся к основному | ||
| main_page.close_current_window_and_switch_to(main_window) No newline at end of file |
There was a problem hiding this comment.
Необходимо исправить: браузер переоткрывается каждый тест. Можно избавиться от этого шага
| def __init__(self, driver): | ||
| self.driver = driver | ||
|
|
||
| def find_element(self, locator, timeout=10): |
There was a problem hiding this comment.
Необходимо исправить здесь и далее: не хватает аннотации allure для шага - allure.step
pages/main_page.py
Outdated
| WebDriverWait(self.driver, 10).until( | ||
| EC.number_of_windows_to_be(2) | ||
| ) | ||
|
|
||
| for window in self.driver.window_handles: | ||
| if window != main_window: | ||
| self.driver.switch_to.window(window) | ||
| break No newline at end of file |
There was a problem hiding this comment.
Необходимо исправить здесь и далее: все вызовы к driver/WebDriverWait должны быть описаны в методах BasePage, а затем вызываться через эти методы в *Page-классах через наследование. Стоит посмотреть в сторону EC.new_window_is_opened
tests/test_order.py
Outdated
| if button == "top": | ||
| main_page.click_order_button_top() | ||
| else: | ||
| main_page.click_order_button_bottom() |
There was a problem hiding this comment.
Нужно исправить: использование условных блоков в теле теста лишает их атомарности. Можно попробовать описать метод который будет принимать нужный локатор кнопки заказа, а сам локатор передавать из параметров теста
tests/test_order.py
Outdated
| main_page.click_order_button_top() | ||
| main_page.click_scooter_logo() | ||
|
|
||
| assert "scooter" in driver.current_url |
There was a problem hiding this comment.
Нужно исправить: здесь и далее, все вызовы к driver/WebDriverWait напрямую из теста или фикстуры не допустимы (кроме get). Необходимо реализовать соответствующий метод в BasePage и вызывать его
tests/test_order.py
Outdated
| main_window = driver.current_window_handle | ||
|
|
||
| main_page.click_yandex_logo_and_wait_for_new_window(main_window) | ||
|
|
||
| assert "dzen" in driver.current_url No newline at end of file |
There was a problem hiding this comment.
Нужно исправить: здесь и далее, все вызовы к driver/WebDriverWait напрямую из теста или фикстуры не допустимы (кроме get). Необходимо реализовать соответствующий метод в BasePage и вызывать его
| from selenium import webdriver | ||
|
|
||
|
|
||
| @pytest.fixture(scope="class") |
There was a problem hiding this comment.
Необходимо исправить: такой скоуп создает зависимые тесты. Стоит использовать скоуп function
No description provided.