From 69001027b8be789b500c7c18d863bfb243d48ebe Mon Sep 17 00:00:00 2001 From: ilshat Date: Sun, 12 Jan 2025 18:42:20 +0300 Subject: [PATCH] diplom 3 --- .gitignore | 2 + conftest.py | 68 ++++++++++++++++++++++++++++ pages/base_page.py | 68 ++++++++++++++++++++++++++++ pages/constructor_page.py | 71 +++++++++++++++++++++++++++++ pages/feed_page.py | 59 ++++++++++++++++++++++++ pages/forgot_password_page.py | 38 ++++++++++++++++ pages/login_page.py | 18 ++++++++ pages/profile_page.py | 50 ++++++++++++++++++++ pytest.ini | 2 + requirements.txt | 4 ++ tests/test_constructor_page.py | 44 ++++++++++++++++++ tests/test_feed_page.py | 73 ++++++++++++++++++++++++++++++ tests/test_forgot_password_page.py | 20 ++++++++ tests/test_login_page.py | 12 +++++ tests/test_profile_page.py | 28 ++++++++++++ urls/urls.py | 7 +++ 16 files changed, 564 insertions(+) create mode 100644 conftest.py create mode 100644 pages/base_page.py create mode 100644 pages/constructor_page.py create mode 100644 pages/feed_page.py create mode 100644 pages/forgot_password_page.py create mode 100644 pages/login_page.py create mode 100644 pages/profile_page.py create mode 100644 pytest.ini create mode 100644 requirements.txt create mode 100644 tests/test_constructor_page.py create mode 100644 tests/test_feed_page.py create mode 100644 tests/test_forgot_password_page.py create mode 100644 tests/test_login_page.py create mode 100644 tests/test_profile_page.py create mode 100644 urls/urls.py diff --git a/.gitignore b/.gitignore index e69de29..1a9aabe 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,2 @@ +.venv +.idea \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..2990db9 --- /dev/null +++ b/conftest.py @@ -0,0 +1,68 @@ +import pytest +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions +from selenium.webdriver.support.wait import WebDriverWait +from urls.urls import REGISTER_URL, LOGIN_URL, BASE_URL +from faker import Faker + +ANY_INPUT_LOCATOR = ".//main//form//input" +EMAIL_OR_NAME_LOCATOR = ".//main//form//input[@name='name']" +PASSWORD_LOCATOR = ".//main//form//input[@name='Пароль']" +REGISTER_BUTTON_LOCATOR = ".//main//form/button" +EMAIL_LOCATOR = ".//main//form//input[@name='name']" +LOGIN_BUTTON_LOCATOR = ".//button[text()='Войти']" + + +@pytest.fixture() +def random_email(): + return Faker().email() + + +@pytest.fixture() +def random_password(): + return Faker().password() + + +@pytest.fixture(params=["chrome"]) +def driver(request): + browser = request.param + if browser == "chrome": + driver = webdriver.Chrome() + elif browser == "firefox": + driver = webdriver.Firefox() + else: + raise ValueError() + yield driver + driver.quit() + + +@pytest.fixture() +def driver_registered(driver, random_email, random_password): + driver.get(REGISTER_URL) + WebDriverWait(driver, 3).until( + expected_conditions.visibility_of_element_located((By.XPATH, ANY_INPUT_LOCATOR))) + for input_element in driver.find_elements(By.XPATH, EMAIL_OR_NAME_LOCATOR): + input_element.send_keys(random_email) + driver.find_element(By.XPATH, PASSWORD_LOCATOR).send_keys(random_password) + WebDriverWait(driver, 3).until( + expected_conditions.visibility_of_element_located((By.XPATH, ANY_INPUT_LOCATOR))) + driver.find_element(By.XPATH, REGISTER_BUTTON_LOCATOR).click() + WebDriverWait(driver, 3).until( + expected_conditions.url_to_be(LOGIN_URL)) + yield driver + driver.quit() + + +@pytest.fixture() +def driver_logged_in(driver_registered, random_email, random_password): + driver_registered.get(LOGIN_URL) + WebDriverWait(driver_registered, 3).until( + expected_conditions.url_to_be(LOGIN_URL)) + driver_registered.find_element(By.XPATH, EMAIL_LOCATOR).send_keys(random_email) + driver_registered.find_element(By.XPATH, PASSWORD_LOCATOR).send_keys(random_password) + driver_registered.find_element(By.XPATH, LOGIN_BUTTON_LOCATOR).click() + WebDriverWait(driver_registered, 3).until( + expected_conditions.url_to_be(BASE_URL)) + yield driver_registered + driver_registered.quit() diff --git a/pages/base_page.py b/pages/base_page.py new file mode 100644 index 0000000..6f6504a --- /dev/null +++ b/pages/base_page.py @@ -0,0 +1,68 @@ +from selenium.webdriver.support import expected_conditions +from selenium.webdriver.support.wait import WebDriverWait +from selenium.webdriver.common.action_chains import ActionChains +import allure +from urls.urls import LOGIN_URL, FORGOT_PASSWORD_URL, BASE_URL + + +class BasePage: + + def __init__(self, driver): + self.driver = driver + + @allure.step('Скролл до нужного элемента') + def scroll_to(self, element): + self.driver.execute_script("arguments[0].scrollIntoView();", element) + + @allure.step('Поиск элемента среди массива по индексу') + def find_element_by_index(self, locator, index): + return self.driver.find_elements(*locator)[index] + + @allure.step('Поиск всех элементов') + def find_all_elements(self, locator): + return self.driver.find_elements(*locator) + + @allure.step('Поиск элемента') + def find_element(self, locator): + return self.driver.find_element(*locator) + + @allure.step('Перетаскивание элемента') + def drag_and_drop(self, from_element, to_element): + ActionChains(self.driver).drag_and_drop(from_element, to_element).perform() + + @allure.step('Ожидание кликабельности элемента') + def wait_to_be_clickable(self, locator): + WebDriverWait(self.driver, 3).until( + expected_conditions.element_to_be_clickable(tuple(locator))) + + @allure.step('Ожидание видимости элемента') + def wait_for_visibility(self, locator): + WebDriverWait(self.driver, 3).until( + expected_conditions.visibility_of_element_located(tuple(locator))) + + @allure.step('Ожидание исчезновения элемента') + def wait_for_invisibility(self, locator): + WebDriverWait(self.driver, 3).until( + expected_conditions.invisibility_of_element_located(tuple(locator))) + + @allure.step('Ожидание смены URL') + def wait_for_url_change(self, url): + WebDriverWait(self.driver, 3).until( + expected_conditions.url_to_be(url)) + + @allure.step('Открытие страницы логина') + def open_login_page(self): + self.driver.get(LOGIN_URL) + self.wait_for_url_change(LOGIN_URL) + + @allure.step('Открытие страницы восстановления пароля') + def open_forgot_password_page(self): + self.driver.get(FORGOT_PASSWORD_URL) + self.wait_for_url_change(FORGOT_PASSWORD_URL) + + @allure.step('Открытие страницы конструктора') + def open_main_page(self): + self.driver.get(BASE_URL) + self.wait_for_url_change(BASE_URL) + + diff --git a/pages/constructor_page.py b/pages/constructor_page.py new file mode 100644 index 0000000..9e29c52 --- /dev/null +++ b/pages/constructor_page.py @@ -0,0 +1,71 @@ +from selenium.webdriver.common.by import By +import allure +from urls.urls import BASE_URL +from pages.base_page import BasePage + + +class ConstructorPage(BasePage): + + constructor_link = (By.XPATH, ".//p[text()='Конструктор']//parent::a[@href='/']") + ingredient_link = (By.XPATH, ".//a[starts-with(@href,'/ingredient')]") + ingredient_counter = (By.XPATH, ".//p[starts-with(@class,'counter_counter__num')]") + close_ingredient_modal = (By.XPATH, ".//h2[text()='Детали ингредиента']/parent::div/following-sibling::button") + basket_element = (By.XPATH, ".//ul[starts-with(@class,'BurgerConstructor_basket')]") + create_order_button = (By.XPATH, ".//button[text()='Оформить заказ']") + order_id_header = (By.XPATH, ".//h2[starts-with(@class, 'Modal_modal__title')]") + + @allure.step('Открытие страницы конструктора') + def click_to_open_constructor_page(self): + self.wait_to_be_clickable(self.constructor_link) + self.find_element(self.constructor_link).click() + self.wait_for_url_change(BASE_URL) + + @allure.step('Проверка открытия страницы конструктора') + def check_constructor_page_opens(self): + assert self.driver.current_url == BASE_URL + + @allure.step('Открытие попапа ингредиента') + def click_to_open_ingredient_popup(self): + self.wait_to_be_clickable(self.ingredient_link) + self.find_element_by_index(self.ingredient_link, 0).click() + self.wait_for_visibility(self.close_ingredient_modal) + + @allure.step('Проверка открытия попапа ингредиента') + def check_ingredient_popup_open(self): + assert self.find_element(self.close_ingredient_modal).is_displayed() + + @allure.step('Закрытие попапа ингредиента') + def click_to_close_ingredient_popup(self): + self.wait_to_be_clickable(self.close_ingredient_modal) + self.find_element(self.close_ingredient_modal).click() + self.wait_for_invisibility(self.close_ingredient_modal) + + @allure.step('Проверка закрытия попапа ингредиента') + def check_ingredient_popup_close(self): + assert self.find_element(self.close_ingredient_modal).is_displayed() is False + + @allure.step('Выбор ингредиента') + def move_ingredient_to_basket(self): + self.wait_to_be_clickable(self.ingredient_link) + ingredient = self.find_element_by_index(self.ingredient_link, 0) + basket = self.find_element(self.basket_element) + self.drag_and_drop(ingredient, basket) + + @allure.step('Проерка выбора ингредиента') + def check_ingredient_counter_increases(self): + counter = self.find_element_by_index(self.ingredient_counter, 0) + assert int(counter.text) > 0 + + @allure.step('Оформить заказ') + def create_order(self): + self.wait_to_be_clickable(self.create_order_button) + self.find_element(self.create_order_button).click() + + @allure.step('Проерка оформления заказа') + def check_create_order(self): + self.wait_for_visibility(self.order_id_header) + order_id = self.find_element(self.order_id_header) + assert int(order_id.text) > 0 + + + diff --git a/pages/feed_page.py b/pages/feed_page.py new file mode 100644 index 0000000..26f7f8d --- /dev/null +++ b/pages/feed_page.py @@ -0,0 +1,59 @@ +from selenium.webdriver.common.by import By +import allure +from urls.urls import FEED_URL +from pages.base_page import BasePage + + +class FeedPage(BasePage): + + feed_lnk = (By.XPATH, ".//a[@href='/feed']") + history_item = (By.XPATH, ".//li[starts-with(@class, 'OrderHistory_listItem')]") + history_id = (By.XPATH, ".//p[starts-with(@class, 'text text_type_digits-default')]") + item_info_header = (By.XPATH, ".//p[text()='Cостав']") + order_counter = (By.XPATH, ".//p[starts-with(@class, 'OrderFeed_number__')]") + not_ready_orders = (By.XPATH, ".//ul[starts-with(@class, 'OrderFeed_orderListReady__')]/li[starts-with(@class, 'text text_type_digits-default')]") + + @allure.step('Открытие страницы ленты заказа') + def click_to_open_feed_page(self): + self.wait_to_be_clickable(self.feed_lnk) + self.find_element(self.feed_lnk).click() + self.wait_for_url_change(FEED_URL) + + @allure.step('Проверка открытия страницы ленты заказов') + def check_feed_page_opens(self): + assert self.driver.current_url == FEED_URL + + @allure.step('Открытие информации о заказе') + def click_to_open_order_info(self): + self.wait_to_be_clickable(self.history_item) + self.find_element_by_index(self.history_item, 0).click() + + @allure.step('Проверка открытия информации о заказе') + def check_open_order_info(self): + self.wait_for_visibility(self.item_info_header) + assert self.find_element(self.item_info_header).is_displayed() + + @allure.step('Проверка наличия своего заказа в общем списке') + def check_order_id_in_all_orders(self, order_id): + self.wait_for_visibility(self.history_id) + for item in self.find_all_elements(self.history_id): + if item.text == order_id: + break + else: + assert False + assert True + + @allure.step('Получение счетчиков заказов') + def get_order_counters(self): + self.wait_for_visibility(self.order_counter) + counters = self.find_all_elements(self.order_counter) + return int(counters[0].text), int(counters[1].text) + + @allure.step('Получение счетчиков заказов') + def get_not_ready_order_ids(self): + self.wait_for_visibility(self.not_ready_orders) + elements = self.find_all_elements(self.not_ready_orders) + return list(map(lambda e: e.text, elements)) + + + diff --git a/pages/forgot_password_page.py b/pages/forgot_password_page.py new file mode 100644 index 0000000..c02d64f --- /dev/null +++ b/pages/forgot_password_page.py @@ -0,0 +1,38 @@ +from selenium.webdriver.common.by import By +import allure +from urls.urls import FORGOT_PASSWORD_URL +from pages.base_page import BasePage +from faker import Faker + + +class ForgotPasswordPage(BasePage): + + restore_password_button = [By.XPATH, ".//button[text()='Восстановить']"] + restore_email_input = [By.XPATH, ".//input[@name='name']"] + restore_password_div_input = [By.XPATH, ".//input[@name='Введите новый пароль']/parent::div"] + show_hide_password_button = [By.XPATH, ".//input[@name='Введите новый пароль']/following-sibling::div[starts-with(@class,'input__icon')]"] + + @allure.step('Отправка запроса на восстановление пароля') + def send_password_restore_request(self): + fake = Faker("ru_RU") + self.wait_to_be_clickable(self.restore_password_button) + self.find_element(self.restore_email_input).send_keys(fake.email()) + self.find_element(self.restore_password_button).click() + self.wait_for_visibility(self.restore_password_div_input) + + @allure.step('Проверка отправки запроса на восстановление пароля') + def check_password_restore_request_sent(self): + self.wait_for_visibility(self.restore_password_div_input) + assert self.find_element(self.restore_password_div_input).is_displayed() + + @allure.step('Нажатие на кнопку показать пароль') + def click_on_focus_password_input_icon(self): + self.wait_to_be_clickable(self.show_hide_password_button) + self.find_element(self.show_hide_password_button).click() + + @allure.step('Проверка фокуса на поле пароля') + def check_password_input_in_active_state(self): + cls = self.find_element(self.restore_password_div_input).get_attribute('class') + assert "input_status_active" in cls + + diff --git a/pages/login_page.py b/pages/login_page.py new file mode 100644 index 0000000..374b1fc --- /dev/null +++ b/pages/login_page.py @@ -0,0 +1,18 @@ +from selenium.webdriver.common.by import By +import allure +from urls.urls import FORGOT_PASSWORD_URL +from pages.base_page import BasePage + + +class LoginPage(BasePage): + + forgot_password_page_link = [By.XPATH, ".//a[@href='/forgot-password']"] + + @allure.step('Проверка открытия страницы восстановления пароля') + def check_forgot_password_page_opens(self): + self.wait_to_be_clickable(self.forgot_password_page_link) + self.find_element(self.forgot_password_page_link).click() + self.wait_for_url_change(FORGOT_PASSWORD_URL) + assert self.driver.current_url == FORGOT_PASSWORD_URL + + diff --git a/pages/profile_page.py b/pages/profile_page.py new file mode 100644 index 0000000..9ac254f --- /dev/null +++ b/pages/profile_page.py @@ -0,0 +1,50 @@ +from selenium.webdriver.common.by import By +import allure +from urls.urls import PROFILE_URL, ORDER_HISTORY_URL, LOGIN_URL +from pages.base_page import BasePage + + +class ProfilePage(BasePage): + + profile_page_link = [By.XPATH, ".//a[@href='/account']"] + order_history_link = [By.XPATH, ".//a[@href='/account/order-history']"] + logout_button = [By.XPATH, ".//button[text()='Выход']"] + order_id = [By.XPATH, ".//p[starts-with(@class, 'text text_type_digits-default')]"] + + @allure.step('Открытие страницы профиля') + def open_profile_page(self): + self.wait_to_be_clickable(self.profile_page_link) + self.find_element(self.profile_page_link).click() + self.wait_for_url_change(PROFILE_URL) + + @allure.step('Проверка открытия страницы профиля') + def check_profile_page_opens(self): + assert self.driver.current_url == PROFILE_URL + + @allure.step('Открытие страницы истории заказов') + def open_order_history_page(self): + self.wait_to_be_clickable(self.order_history_link) + self.find_element(self.order_history_link).click() + self.wait_for_url_change(ORDER_HISTORY_URL) + + @allure.step('Получение последнего id заказа') + def get_last_order_id(self): + self.wait_for_visibility(self.order_id) + return self.find_element_by_index(self.order_id, 0).text + + @allure.step('Проверка открытия страницы истории заказов') + def check_order_history_page_opens(self): + assert self.driver.current_url == ORDER_HISTORY_URL + + @allure.step('Выход из ЛК') + def logout(self): + self.wait_to_be_clickable(self.logout_button) + self.find_element(self.logout_button).click() + self.wait_for_url_change(LOGIN_URL) + + @allure.step('Проверка выхода из ЛК') + def check_logout(self): + assert self.driver.current_url == LOGIN_URL + + + diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..03f586d --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +pythonpath = . \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1d84308 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +faker +pytest +allure-pytest +selenium diff --git a/tests/test_constructor_page.py b/tests/test_constructor_page.py new file mode 100644 index 0000000..2740318 --- /dev/null +++ b/tests/test_constructor_page.py @@ -0,0 +1,44 @@ +from pages.constructor_page import ConstructorPage +import allure + + +class TestConstructorPage: + + @allure.title('Проверка открытия страницы конструктора') + def test_open_profile_from_header(self, driver): + constructor_page = ConstructorPage(driver) + constructor_page.open_login_page() + constructor_page.click_to_open_constructor_page() + constructor_page.check_constructor_page_opens() + + @allure.title('Проверка открытия попапа ингредиента') + def test_open_profile_from_header(self, driver): + constructor_page = ConstructorPage(driver) + constructor_page.open_main_page() + constructor_page.click_to_open_ingredient_popup() + constructor_page.check_ingredient_popup_open() + + @allure.title('Проверка закрытия попапа ингредиента') + def test_open_profile_from_header(self, driver): + constructor_page = ConstructorPage(driver) + constructor_page.open_main_page() + constructor_page.click_to_open_ingredient_popup() + constructor_page.click_to_close_ingredient_popup() + constructor_page.check_ingredient_popup_close() + + @allure.title('Проверка увеличения счетчика ингредиента') + def test_increment_ingredient_counter(self, driver): + constructor_page = ConstructorPage(driver) + constructor_page.open_main_page() + constructor_page.move_ingredient_to_basket() + constructor_page.check_ingredient_counter_increases() + + @allure.title('Проверка создания заказа для залогиненного пользователя') + def test_increment_ingredient_counter(self, driver_logged_in): + constructor_page = ConstructorPage(driver_logged_in) + constructor_page.open_main_page() + constructor_page.move_ingredient_to_basket() + constructor_page.create_order() + constructor_page.check_create_order() + + diff --git a/tests/test_feed_page.py b/tests/test_feed_page.py new file mode 100644 index 0000000..6f28896 --- /dev/null +++ b/tests/test_feed_page.py @@ -0,0 +1,73 @@ +import time + +from pages.feed_page import FeedPage +from pages.profile_page import ProfilePage +from pages.constructor_page import ConstructorPage +import allure + + +class TestFeedPage: + + @allure.title('Проверка открытия страницы лента заказов') + def test_open_profile_from_header(self, driver): + feed_page = FeedPage(driver) + feed_page.open_main_page() + feed_page.click_to_open_feed_page() + feed_page.check_feed_page_opens() + + @allure.title('Проверка открытия информации о заказе') + def test_open_order_info(self, driver): + feed_page = FeedPage(driver) + feed_page.open_main_page() + feed_page.click_to_open_feed_page() + feed_page.click_to_open_order_info() + feed_page.check_open_order_info() + + @allure.title('Проверка наличия заказа пользователя в общей истории') + def test_order_id_in_all_orders(self, driver_logged_in): + constructor_page = ConstructorPage(driver_logged_in) + constructor_page.open_main_page() + constructor_page.move_ingredient_to_basket() + constructor_page.create_order() + constructor_page.open_main_page() + profile_page = ProfilePage(driver_logged_in) + profile_page.open_profile_page() + profile_page.open_order_history_page() + order_id = profile_page.get_last_order_id() + feed_page = FeedPage(driver_logged_in) + feed_page.click_to_open_feed_page() + feed_page.check_order_id_in_all_orders(order_id) + + @allure.title('Проверка увеличения счетчика заказов') + def test_increment_ingredient_counter(self, driver_logged_in): + feed_page = FeedPage(driver_logged_in) + feed_page.click_to_open_feed_page() + old_1, old_2 = feed_page.get_order_counters() + constructor_page = ConstructorPage(driver_logged_in) + constructor_page.open_main_page() + constructor_page.move_ingredient_to_basket() + constructor_page.create_order() + constructor_page.open_main_page() + feed_page.click_to_open_feed_page() + time.sleep(3) + new_1, new_2 = feed_page.get_order_counters() + assert old_1 < new_1 + assert old_2 < new_2 + + @allure.title('Проверка наличия созданного заказа в работе') + def test_new_order_in_not_ready_orders(self, driver_logged_in): + constructor_page = ConstructorPage(driver_logged_in) + constructor_page.open_main_page() + constructor_page.move_ingredient_to_basket() + constructor_page.create_order() + constructor_page.open_main_page() + profile_page = ProfilePage(driver_logged_in) + profile_page.open_profile_page() + profile_page.open_order_history_page() + order_id = profile_page.get_last_order_id() + feed_page = FeedPage(driver_logged_in) + feed_page.click_to_open_feed_page() + time.sleep(3) + not_ready_orders = feed_page.get_not_ready_order_ids() + assert order_id[1:] in not_ready_orders + diff --git a/tests/test_forgot_password_page.py b/tests/test_forgot_password_page.py new file mode 100644 index 0000000..6de8fcd --- /dev/null +++ b/tests/test_forgot_password_page.py @@ -0,0 +1,20 @@ +from pages.forgot_password_page import ForgotPasswordPage +import allure + + +class TestForgotPasswordPage: + + @allure.title('Проверка открытия главной страницы') + def test_open_main_page_from_header(self, driver): + forgot_password_page = ForgotPasswordPage(driver) + forgot_password_page.open_forgot_password_page() + forgot_password_page.send_password_restore_request() + forgot_password_page.check_password_restore_request_sent() + + @allure.title('Проверка фокуса на поле пароля') + def test_password_input_in_active_state(self, driver): + forgot_password_page = ForgotPasswordPage(driver) + forgot_password_page.open_forgot_password_page() + forgot_password_page.send_password_restore_request() + forgot_password_page.click_on_focus_password_input_icon() + forgot_password_page.check_password_input_in_active_state() diff --git a/tests/test_login_page.py b/tests/test_login_page.py new file mode 100644 index 0000000..ba37a9e --- /dev/null +++ b/tests/test_login_page.py @@ -0,0 +1,12 @@ +from pages.login_page import LoginPage +import allure + + +class TestOrderPage: + + @allure.title('Проверка открытия главной страницы') + def test_open_main_page_from_header(self, driver): + order_page = LoginPage(driver) + order_page.open_login_page() + order_page.check_forgot_password_page_opens() + diff --git a/tests/test_profile_page.py b/tests/test_profile_page.py new file mode 100644 index 0000000..058f6ce --- /dev/null +++ b/tests/test_profile_page.py @@ -0,0 +1,28 @@ +import time + +from pages.profile_page import ProfilePage +import allure + + +class TestProfilePage: + + @allure.title('Проверка открытия главной страницы') + def test_open_profile_from_header(self, driver_logged_in): + profile_page = ProfilePage(driver_logged_in) + profile_page.open_profile_page() + profile_page.check_profile_page_opens() + + @allure.title('Проверка открытия главной страницы') + def test_open_order_history_page(self, driver_logged_in): + profile_page = ProfilePage(driver_logged_in) + profile_page.open_profile_page() + profile_page.open_order_history_page() + profile_page.check_order_history_page_opens() + + @allure.title('Проверка выхода из ЛК') + def test_logout(self, driver_logged_in): + profile_page = ProfilePage(driver_logged_in) + profile_page.open_profile_page() + profile_page.logout() + profile_page.check_logout() + diff --git a/urls/urls.py b/urls/urls.py new file mode 100644 index 0000000..4b2bb6c --- /dev/null +++ b/urls/urls.py @@ -0,0 +1,7 @@ +BASE_URL = 'https://stellarburgers.nomoreparties.site/' +LOGIN_URL = f"{BASE_URL}login" +FORGOT_PASSWORD_URL = f"{BASE_URL}forgot-password" +REGISTER_URL = f'{BASE_URL}register' +PROFILE_URL = f'{BASE_URL}account/profile' +ORDER_HISTORY_URL = f'{BASE_URL}account/order-history' +FEED_URL = f'{BASE_URL}feed'