From fac596da7c712e49abf6f076dfc18754ad0ed5d5 Mon Sep 17 00:00:00 2001 From: usergalina1 Date: Tue, 5 Nov 2024 11:05:36 -0800 Subject: [PATCH 1/3] add 3 tests --- lesson3/__init__.py | 0 lesson3/waits/__init__.py | 0 lesson3/waits/hw3/__init__.py | 0 lesson3/waits/hw3/test_expl_wait.py | 72 ++++++++++++++++ lesson3/waits/hw3/test_impl_wait.py | 119 +++++++++++++++++++++++++++ lesson3/waits/hw3/test_time_sleep.py | 53 ++++++++++++ lesson3/waits/test_expl.py | 13 +-- lesson3/waits/test_impl.py | 13 ++- 8 files changed, 263 insertions(+), 7 deletions(-) create mode 100644 lesson3/__init__.py create mode 100644 lesson3/waits/__init__.py create mode 100644 lesson3/waits/hw3/__init__.py create mode 100644 lesson3/waits/hw3/test_expl_wait.py create mode 100644 lesson3/waits/hw3/test_impl_wait.py create mode 100644 lesson3/waits/hw3/test_time_sleep.py diff --git a/lesson3/__init__.py b/lesson3/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lesson3/waits/__init__.py b/lesson3/waits/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lesson3/waits/hw3/__init__.py b/lesson3/waits/hw3/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lesson3/waits/hw3/test_expl_wait.py b/lesson3/waits/hw3/test_expl_wait.py new file mode 100644 index 0000000..84ff61a --- /dev/null +++ b/lesson3/waits/hw3/test_expl_wait.py @@ -0,0 +1,72 @@ +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.wait import WebDriverWait +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +import pytest + + +@pytest.fixture +def chrome_options(): + options = Options() + options.add_argument("--incognito") + options.add_argument("--window-size=1920,1080") + return options + + +@pytest.fixture +def driver(chrome_options): + driver = webdriver.Chrome(options=chrome_options) + yield driver + driver.quit() + + +@pytest.fixture +def wait(driver): + wait = WebDriverWait(driver, timeout=10) + return wait + + +def test_registration(driver, wait): + # Перейти по URL: Открыть в браузере указанный URL сайта https://victoretc.github.io/selenium_waits/ + # Проверить заголовок: Убедиться, что текст в теге + driver.get("https://victoretc.github.io/selenium_waits/") + title = driver.find_element(By.XPATH, "//h1[text()= 'Практика с ожиданиями в Selenium']") + assert title.text == 'Практика с ожиданиями в Selenium' + + # Дождаться появления кнопки "Начать тестирование" + # Найти кнопку: Найти на странице кнопку с текстом "Начать тестирование". + begin_test_btn = wait.until(EC.visibility_of_element_located((By.XPATH, "//button[@id='startTest']"))) + assert begin_test_btn.is_displayed() + assert begin_test_btn.text == 'Начать тестирование' + + # Кликнуть по кнопке "Начать тестирование". + begin_test_btn.click() + login = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@for='login']"))) + + assert login.is_displayed() + + # Ввести "login" в поле для логина. + login_field = driver.find_element(By.XPATH, "//*[@id='login']") + login_field.send_keys("email") + + # Ввести "password" в поле для пароля. + password_field = driver.find_element(By.XPATH, "//*[@id='password']") + password_field.send_keys("password") + + # Установить флажок в чекбокс "Согласен со всеми правилами". + check_box_agree = driver.find_element(By.XPATH, "//*[@id='agree']") + check_box_agree.click() + + # Нажать кнопку "Зарегистрироваться". + registration_btn = driver.find_element(By.XPATH, "//*[@id='register']") + registration_btn.click() + + # Удостовериться, что появился индикатор загрузки. + loader_indicator = driver.find_element(By.XPATH, "//*[@id='loader']") + assert loader_indicator.is_displayed() + + # Убедиться, что после завершения загрузки появилось сообщение "Вы успешно зарегистрированы". + success_registration = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='successMessage']"))) + assert success_registration.is_displayed() + assert success_registration.text == 'Вы успешно зарегистрированы!' diff --git a/lesson3/waits/hw3/test_impl_wait.py b/lesson3/waits/hw3/test_impl_wait.py new file mode 100644 index 0000000..b50961e --- /dev/null +++ b/lesson3/waits/hw3/test_impl_wait.py @@ -0,0 +1,119 @@ +import time + +from selenium.webdriver.common.by import By +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +import pytest + + +@pytest.fixture +def chrome_options(): + options = Options() + options.add_argument("--incognito") + options.add_argument("--window-size=1920,1080") + return options + + +@pytest.fixture +def driver(chrome_options): + driver = webdriver.Chrome(options=chrome_options) + driver.implicitly_wait(10) + yield driver + driver.quit() + + +def test_registration(driver): + # Перейти по URL: Открыть в браузере указанный URL сайта https://victoretc.github.io/selenium_waits/ + # Проверить заголовок: Убедиться, что текст в теге + driver.get("https://victoretc.github.io/selenium_waits/") + title = driver.find_element(By.XPATH, "//h1[text()= 'Практика с ожиданиями в Selenium']") + assert title.text == 'Практика с ожиданиями в Selenium' + + # Дождаться появления кнопки "Начать тестирование" + # Найти кнопку: Найти на странице кнопку с текстом "Начать тестирование". + start_test_btn = driver.find_element(By.XPATH, "//button[@id='startTest']") + assert start_test_btn.is_displayed() + assert start_test_btn.text == 'Начать тестирование' + + # Кликнуть по кнопке "Начать тестирование". + start_test_btn.click() + + login = driver.find_element(By.XPATH, "//*[@for='login']") + assert login.is_displayed() + + # Ввести "login" в поле для логина. + login_field = driver.find_element(By.XPATH, "//*[@id='login']") + login_field.send_keys("email") + + # Ввести "password" в поле для пароля. + password_field = driver.find_element(By.XPATH, "//*[@id='password']") + password_field.send_keys("password") + + # Установить флажок в чекбокс "Согласен со всеми правилами". + check_box_agree = driver.find_element(By.XPATH, "//*[@id='agree']") + check_box_agree.click() + + # Нажать кнопку "Зарегистрироваться". + registration_btn = driver.find_element(By.XPATH, "//*[@id='register']") + registration_btn.click() + + + # Удостовериться, что появился индикатор загрузки. + loader_indicator = driver.find_element(By.XPATH, "//*[@id='loader']") + assert loader_indicator.is_displayed() + + + # Убедиться, что после завершения загрузки появилось сообщение "Вы успешно зарегистрированы". + success_registration = driver.find_element(By.XPATH, "//*[@id='successMessage']") + assert success_registration.is_displayed() + assert success_registration.text == 'Вы успешно зарегистрированы!' + + +def test_registration1(driver): + try: + # 1. Переходим на сайт + driver.get('https://victoretc.github.io/selenium_waits/') + + # 2. Проверяем заголовок страницы + assert "Практика Selenium" in driver.title, "Заголовок страницы не совпадает" + + # 3. Ждем появления кнопки "Начать тестирование" + # Убедимся, что кнопка присутствует на странице + start_testing_button = driver.find_element(By.XPATH, "//button[text()='Начать тестирование']") + + # 4. Кликаем по кнопке "Начать тестирование" + start_testing_button.click() + + # 5. Вводим логин в поле для логина + login_field = driver.find_element(By.XPATH, "//*[@id='login']") + login_field.send_keys('login') + + # 6. Вводим пароль в поле для пароля + password_field = driver.find_element(By.XPATH, "//*[@id='password']") + password_field.send_keys('password') + + # 7. Устанавливаем флажок "Согласен со всеми правилами" + agree_checkbox = driver.find_element(By.XPATH, "//*[@id='agree']") + if not agree_checkbox.is_selected(): + agree_checkbox.click() + + # 8. Нажимаем кнопку "Зарегистрироваться" + register_button = driver.find_element(By.XPATH, "//*[@id='register']") + register_button.click() + + # 9. Проверяем наличие индикатора загрузки + loading_indicator = driver.find_element(By.XPATH, "//*[@id='loader']") # Пример ID для индикатора + assert loading_indicator.is_displayed(), "Индикатор загрузки не отображается" + + # 10. Ждем завершения загрузки и появления сообщения о успешной регистрации + time.sleep(5) # Ожидаем, что индикатор загрузки исчезнет + + # 11. Проверяем сообщение о успешной регистрации + success_message = driver.find_element(By.XPATH, "//*[@id='successMessage']") + assert success_message.is_displayed(), "Сообщение об успешной регистрации не появилось" + + print("Тест прошел успешно!") + + finally: + # Закрываем браузер + driver.quit() diff --git a/lesson3/waits/hw3/test_time_sleep.py b/lesson3/waits/hw3/test_time_sleep.py new file mode 100644 index 0000000..2682515 --- /dev/null +++ b/lesson3/waits/hw3/test_time_sleep.py @@ -0,0 +1,53 @@ +import time +from selenium.webdriver.common.by import By + + +def test_registration(driver): + # Перейти по URL: Открыть в браузере указанный URL сайта https://victoretc.github.io/selenium_waits/ + # Проверить заголовок: Убедиться, что текст в теге + driver.get("https://victoretc.github.io/selenium_waits/") + title = driver.find_element(By.XPATH, "//h1[text()= 'Практика с ожиданиями в Selenium']") + assert title.text == 'Практика с ожиданиями в Selenium' + time.sleep(5) + + # Дождаться появления кнопки "Начать тестирование" + # Найти кнопку: Найти на странице кнопку с текстом "Начать тестирование". + begin_test_btn = driver.find_element(By.XPATH, "//button[@id='startTest']") + assert begin_test_btn.is_displayed() + assert begin_test_btn.text == 'Начать тестирование' + + # Кликнуть по кнопке "Начать тестирование". + begin_test_btn.click() + time.sleep(5) + login = driver.find_element(By.XPATH, "//*[@for='login']") + assert login.is_displayed() + + # Ввести "login" в поле для логина. + login_field = driver.find_element(By.XPATH, "//*[@id='login']") + login_field.send_keys("email") + time.sleep(3) + + # Ввести "password" в поле для пароля. + password_field = driver.find_element(By.XPATH, "//*[@id='password']") + password_field.send_keys("password") + time.sleep(3) + + # Установить флажок в чекбокс "Согласен со всеми правилами". + check_box_agree = driver.find_element(By.XPATH, "//*[@id='agree']") + check_box_agree.click() + time.sleep(3) + + # Нажать кнопку "Зарегистрироваться". + registration_btn = driver.find_element(By.XPATH, "//*[@id='register']") + registration_btn.click() + time.sleep(2) + + # Удостовериться, что появился индикатор загрузки. + loader_indicator = driver.find_element(By.XPATH, "//*[@id='loader']") + assert loader_indicator.is_displayed() + time.sleep(5) + + # Убедиться, что после завершения загрузки появилось сообщение "Вы успешно зарегистрированы". + success_registration = driver.find_element(By.XPATH, "//*[@id='successMessage']") + assert success_registration.is_displayed() + assert success_registration.text == 'Вы успешно зарегистрированы!' diff --git a/lesson3/waits/test_expl.py b/lesson3/waits/test_expl.py index 2ca066a..a24801e 100644 --- a/lesson3/waits/test_expl.py +++ b/lesson3/waits/test_expl.py @@ -1,3 +1,4 @@ +# Явные ожидания from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By @@ -5,28 +6,28 @@ from selenium.webdriver.support import expected_conditions as EC import pytest + @pytest.fixture def chrome_options(): options = Options() options.add_argument('--start-maximized') return options + @pytest.fixture def driver(chrome_options): driver = webdriver.Chrome(options=chrome_options) return driver + @pytest.fixture def wait(driver): wait = WebDriverWait(driver, timeout=10) return wait + def test_visible_after_with_explicit_waits(driver, wait): driver.get('https://demoqa.com/dynamic-properties') - visible_after_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Visible After 5 Seconds']"))) + visible_after_button = wait.until( + EC.element_to_be_clickable((By.XPATH, "//button[text()='Visible After 5 Seconds']"))) assert visible_after_button.text == 'Visible After 5 Seconds' - - - - - diff --git a/lesson3/waits/test_impl.py b/lesson3/waits/test_impl.py index 2db0c4a..a62c723 100644 --- a/lesson3/waits/test_impl.py +++ b/lesson3/waits/test_impl.py @@ -1,14 +1,17 @@ +# неявные ожидания from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By import pytest + @pytest.fixture def chrome_options(): options = Options() options.add_argument('--start-maximized') return options + @pytest.fixture def driver(chrome_options): driver = webdriver.Chrome(options=chrome_options) @@ -16,12 +19,20 @@ def driver(chrome_options): yield driver driver.quit() + def test_visible_after_with_implicit_wait(driver): driver.get('https://demoqa.com/dynamic-properties') vissible_after_button = driver.find_element(By.XPATH, "//button[text()='Visible After 5 Seconds']") assert vissible_after_button.is_displayed() +def test_will_enable_5sec_implicit_wait(driver): + driver.get('https://demoqa.com/dynamic-properties') + will_enable_5_sec = driver.find_element(By.XPATH, "//*[@id='enableAfter']") + assert will_enable_5_sec.is_displayed() - +def test_color_change_btn_implicit_wait(driver): + driver.get('https://demoqa.com/dynamic-properties') + color_change_btn = driver.find_element(By.XPATH, "//button[@id='colorChange']") + assert color_change_btn.is_displayed() From e1320b847c61e9d1908339a0344a1651dc8d1cdc Mon Sep 17 00:00:00 2001 From: usergalina1 Date: Wed, 6 Nov 2024 13:31:19 -0800 Subject: [PATCH 2/3] fix test_impl_wait.py --- lesson3/waits/hw3/test_impl_wait.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lesson3/waits/hw3/test_impl_wait.py b/lesson3/waits/hw3/test_impl_wait.py index b50961e..fe346cd 100644 --- a/lesson3/waits/hw3/test_impl_wait.py +++ b/lesson3/waits/hw3/test_impl_wait.py @@ -31,11 +31,8 @@ def test_registration(driver): # Дождаться появления кнопки "Начать тестирование" # Найти кнопку: Найти на странице кнопку с текстом "Начать тестирование". - start_test_btn = driver.find_element(By.XPATH, "//button[@id='startTest']") - assert start_test_btn.is_displayed() - assert start_test_btn.text == 'Начать тестирование' - # Кликнуть по кнопке "Начать тестирование". + start_test_btn = driver.find_element(By.XPATH, "//button[@id='startTest']") start_test_btn.click() login = driver.find_element(By.XPATH, "//*[@for='login']") @@ -57,11 +54,11 @@ def test_registration(driver): registration_btn = driver.find_element(By.XPATH, "//*[@id='register']") registration_btn.click() - # Удостовериться, что появился индикатор загрузки. loader_indicator = driver.find_element(By.XPATH, "//*[@id='loader']") assert loader_indicator.is_displayed() + time.sleep(5) # Убедиться, что после завершения загрузки появилось сообщение "Вы успешно зарегистрированы". success_registration = driver.find_element(By.XPATH, "//*[@id='successMessage']") From 941fcb121a36d7e79ffabf98628cfc9baf644ea1 Mon Sep 17 00:00:00 2001 From: usergalina1 Date: Wed, 6 Nov 2024 22:09:23 -0800 Subject: [PATCH 3/3] add test_practice_waits --- lesson3/waits/hw3/test_practice_waits.py | 79 ++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 lesson3/waits/hw3/test_practice_waits.py diff --git a/lesson3/waits/hw3/test_practice_waits.py b/lesson3/waits/hw3/test_practice_waits.py new file mode 100644 index 0000000..56d88e7 --- /dev/null +++ b/lesson3/waits/hw3/test_practice_waits.py @@ -0,0 +1,79 @@ +import pytest +from selenium.webdriver.chrome.options import Options +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.wait import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC + + +@pytest.fixture +def chrome_options(): + options = Options() + options.add_argument("--window-size=1900x1000") + return options + + +@pytest.fixture +def driver(chrome_options): + driver = webdriver.Chrome(options=chrome_options) + driver.implicitly_wait(10) + yield driver + driver.quit() + + +@pytest.fixture +def wait(driver): + wait = WebDriverWait(driver, timeout=10) + return wait + + +def test1(driver, wait): + driver.get("https://www.selenium.dev/selenium/web/dynamic.html") + add_box_locator = "//*[@value = 'Add a box!']" + box_locator = "//div[contains(@id, 'box')]" + + add_box = wait.until(EC.visibility_of_element_located((By.XPATH, add_box_locator))) + assert add_box.is_displayed() + assert add_box.get_attribute("value") == 'Add a box!' + + lst = [] + add_box.click() + box = wait.until(EC.visibility_of_element_located((By.XPATH, box_locator))) + lst.append(box) + count = 1 + + add_box.click() + lst.append(box) + count += 1 + assert len(lst) == count + + +def test2(driver, wait): + driver.get("https://demoqa.com/dynamic-properties") + will_enable_5sec_locator = "//*[@id = 'enableAfter']" + + will_enable_5sec_btn = wait.until(EC.visibility_of_element_located((By.XPATH, will_enable_5sec_locator))) + assert will_enable_5sec_btn.is_displayed() + + +def test3(driver, wait): + driver.get("https://the-internet.herokuapp.com/dynamic_loading") + assert driver.title == "The Internet" + + hidden_element_locator = "//*[contains(text(), 'Element on page that is hidden')]" + start_btn_locator = "//*[contains(text(), 'Start')]" + loading_indicator_locator = "//*[@id = 'loading']" + hello_world_locator = "//*[contains(text(), 'Hello World!')]" + + hidden_element = wait.until(EC.element_to_be_clickable((By.XPATH, hidden_element_locator))) + hidden_element.click() + + start_btn = wait.until(EC.element_to_be_clickable((By.XPATH, start_btn_locator))) + assert start_btn.is_enabled() + start_btn.click() + + loading_indicator = wait.until(EC.visibility_of_element_located((By.XPATH, loading_indicator_locator))) + assert loading_indicator.is_displayed() + + hello_world = wait.until(EC.visibility_of_element_located((By.XPATH, hello_world_locator))) + assert hello_world.is_displayed()