1 of 25

Сергей Слесарев

Автоматизированное тестирование (Python)

Занятие 09 - Автоматизация ручных тест-кейсов

01.07.2025

Сергей Слесарев

2 of 25

Содержание

  1. Разбор ДЗ
    1. QA-AT-Python-08-ДЗ - условия
    2. Задание-1: необходимые команды
    3. test_01_check_title, задания
    4. Недостаток-1: проверка вхождения
    5. Недостаток-2: не отлавливаем ошибки
    6. Недостаток-3: нет проверки текста
    7. Недостаток-4: автотест падает при 1 ошибке
    8. Задание 2 (*). Подсказка
  2. Повторение
  3. Вопросы, комментарии, пожелания

3 of 25

Содержание

  • Основы Selenium
    • Класс WebDriver - поля, методы
    • Класс WebElement - поля, методы
    • Способы поиска элементов
    • Что можно сделать с элементами

4 of 25

QA-AT-Python-08-ДЗ - условия

1. Напишите автотест, который проверит, что на странице https://slqa.ru/demo/dt/ заголовок (title) равен "Current Time" а на странице есть фразы "время по Гринвичу" и "время по Москве".

2. (*) Напишите автотест, который проверит, что дата и время по Москве и по Гринвичу на этой странице определяются правильно.

3. (**) Сделайте ДЗ из материалов академии: https://fs.top-academy.ru/api/v1/files/JVxouxm3Z5DE1M9YIcA1ahmbI2Oyrjyg?inline=true

4. (**) Изучите материалы урока академии и ответьте на контрольные вопросы: https://top-academy.site/тпо_at-урок-8-введение-в-selenium/

5 of 25

Задание-1: необходимые команды

Первым делом нам надо импортировать библиотеку selenium:

from selenium import webdriver

Затем отметить функцию как тест и придумать ей имя:

def test_01_check_title():

Затем создать объект класса WebDriver:

driver = webdriver.Chrome()

Затем открыть нужный сайт:

driver.get("https://slqa.ru/demo/dt/")

6 of 25

Задание-1: необходимые команды

Затем выполнить проверку того, что заголовок страницы соответствует строке "Current Time":

assert "Current Time" in driver.title

В заключении завершить работу с драйвером браузера:

driver.quit()

7 of 25

test_01_check_title, задания

Вот полный код теста:

from selenium import webdriver

def test_01_check_title():

driver = webdriver.Chrome()

driver.get("https://slqa.ru/demo/dt/")

assert "Current Time" in driver.title

driver.quit()

Задание-1: в этом автотесте есть несколько недостатков. Найдите их.

Задание-2: попробуйте исправить эти недостатки.

8 of 25

Недостаток-1: проверка вхождения

Недостаток-1 заключается в том, что в автотесте осуществляется проверка вхождения строки "Current Time" в текст заголовка driver.title, а не точное сравнение:

assert "Current Time" in driver.title

Вместо этого надо написать:

assert "Current Time" == driver.title

Для проверки запустите автотест на страницах https://slqa.ru/demo/dt/ и https://slqa.ru/demo/dt/dt_v02.php. Вторая страница не соответствует требованиям.

На следующем слайде - код исправленного автотеста.

Я добавил time.sleep(10) в демонстративных целях, чтобы страница сразу же не закрывалась. В реальных автотестах не надо такую команду добавлять.

9 of 25

Недостаток-1: проверка вхождения

import time

from selenium import webdriver

def test_01_check_title():

driver = webdriver.Chrome()

driver.get("https://slqa.ru/demo/dt/")

assert "Current Time" == driver.title

time.sleep(10)

driver.quit()

10 of 25

Недостаток-2: не отлавливаем ошибки

Когда мы выполняем тест со страницей https://slqa.ru/demo/dt/dt_v02.php, то мы можем наглядно убедиться, что все команды после появления ошибки не выполняются (time.sleep не работает). Для того, чтобы команды гарантированно выполнялись, можно использовать конструкцию:

try:

# Тут код, в котором может возникнуть ошибка

finally:

# Тут код, который гарантированно выполнится

11 of 25

Недостаток-2: не отлавливаем ошибки

import time

from selenium import webdriver

def test_01_check_title():

driver = webdriver.Chrome()

try:

driver.get("https://slqa.ru/demo/dt/dt_v02.php")

assert "Current Time" == driver.title

finally:

time.sleep(10)

driver.quit()

12 of 25

Недостаток-3: нет проверки текста

Задание не доделано. Не выполнено следующая проверка текста на странице:

на странице есть фразы "время по Гринвичу" и "время по Москве"

1. Находим элемент body (вся страница целиком):

element = driver.find_element(By.TAG_NAME, "body")

2. Получаем текст этого элемента (весь текст страницы):

page_text = element.text

3. Проверяем, что в тексте страницы есть нужное:

assert "время по Гринвичу" in page_text

13 of 25

Недостаток-3: нет проверки текста

import time

from selenium import webdriver

from selenium.webdriver.common.by import By

def test_02_check_all():

driver = webdriver.Chrome()

try:

driver.get("https://slqa.ru/demo/dt/")

element = driver.find_element(By.TAG_NAME, "body")

page_text = element.text

assert "Current Time" == driver.title

assert "время по Гринвичу" in page_text

assert "время по Москве" in page_text

finally:

time.sleep(10)

driver.quit()

14 of 25

Недостаток-4: автотест падает при 1 ошибке

Если на странице есть несколько проверок и первая из них проваливается, то тест останавливает свою работу и не выполняет следующие проверки.

Варианты исправления:

Вариант-1: оставить тест-кейс как есть, но заменить assert-ы на "мягкие проверки". Сейчас мы не будем рассматривать этот вариант - у нас будет одно из занятий посвящено различным типам проверок.

Вариант-2: делать "атомарные" проверки, т.е. такие, которые соответствуют правилу "один тест-кейс - одна проверка".

15 of 25

Задание 2 (*). Подсказка

Если кто-то пытался сделать задание 2 (со звёздочкой), то вот подсказка, как его сделать. Если будете делать и не получится - напишите в чате.

from datetime import datetime, timedelta

from time import gmtime, strftime

def test_time_example():

gmt_time = gmtime()

gmt_time_str = strftime("%Y-%m-%d, %H:%M:%S", gmt_time)

print("\nВремя по Гринвичу:", gmt_time_str)

# Преобразуем в московское время: UTC + 3 часа

moscow_time = datetime.strptime(gmt_time_str, "%Y-%m-%d, %H:%M:%S") + timedelta(hours=3)

moscow_time_str = moscow_time.strftime("%Y-%m-%d, %H:%M:%S")

print("Московское время:", moscow_time_str)

16 of 25

Дополнительные правила по ДЗ

  1. Если у вас не сделано несколько ДЗ первую очередь делайте последнее ДЗ, потом предыдущие.

Это больше всего поможет подготовиться к следующему занятию, т.к. мы начём занятия с разбора этого ДЗ.

Повторение предыдущих правил.

  • Обращаться друг к другу и к преподавателю на "ты" и по имени.

Мы же с вами уже практически коллеги, а в большинстве IT-компаний принято ко всем, даже к генеральному директору, обращаться на "ты".

  • Обязательно выполняйте домашние задания вовремя.

На каждом занятии я буду предполагать, что вы попрактиковались в темах, рассмотренных на предыдущем занятии. Без выполнения д.з. вам будет сразу же трудно на следующем же занятии, а через несколько занятий вы серьёзно отстанете.

  • Если пропустили занятие, то надо до следующего занятия пройти материал пропущенного и сделать д.з.

Иначе вы рискуете вообще не понять следующее занятие. В конце курса это будет не так серьёзно - темы станут более независимые, но первые несколько занятий идут строго последовательно.

17 of 25

Класс WebDriver

Класс WebDriver в библиотеке Selenium на языке Python — это основной класс, используемый для взаимодействия с браузером. Он предоставляет методы и атрибуты для управления окном браузера, открытия страниц, поиска элементов, выполнения действий и т.д.

Создание:

from selenium import webdriver

driver = webdriver.Chrome()

или

driver = webdriver.Firefox()

Рассказать подробней

18 of 25

Класс WebDriver

Поля:

.title — возвращает заголовок текущей страницы.

.current_url — возвращает текущий URL (т.е. адрес).

.page_source — возвращает HTML-код текущей страницы.

Методы:

.get(url) — открывает указанную веб-страницу.

.quit() — закрывает все окна браузера и завершает сеанс.

.find_element(by, value) — находит первый элемент по заданному локатору (например, ID, CSS-селектор, XPath).

19 of 25

Класс WebElement

Класс WebElement в библиотеке Selenium (Python) представляет собой объект, соответствующий элементу на веб-странице.

После того как вы нашли элемент с помощью метода .find_element(), вы получаете объект типа WebElement, с которым можно взаимодействовать.

Создание:

element = driver.find_element(By.TAG_NAME, "h1")

20 of 25

Класс WebElement

Поля:

  • .text — возвращает текстовое содержимое элемента (без HTML).
  • .tag_name — возвращает тег HTML элемента.

Методы:

  • .get_attribute(name) — возвращает значение указанного атрибута элемента (например, "href", "class" и т.д.).
  • .click() — кликает по элементу.
  • .send_keys(value) — вводит текст в поле ввода (например, в <input> или <textarea>).
  • .clear() — очищает текстовое поле перед вводом новых данных.
  • .submit() — отправляет форму, в которой находится элемент (или сам элемент, если он является формой).

21 of 25

Алгоритм работы

  1. Открываем страницу
  2. Находим элемент
  3. Что-то делаем с элементом
  4. Выполняем проверку

22 of 25

Задания

Напишите автотесты для страницы:

  1. https://slqa.ru/cases/cinema/index_only_age.html
  2. https://slqa.ru/cases/ChatGPTLogin/
  3. http://92.51.36.108:7777/sl.qa/fc/v01/
  4. http://92.51.36.108:7777/sl.qa/cinema/

23 of 25

Материалы академии

https://top-academy.site/тпо_at-урок-7-введение-в-selenium-и-основы-pytest/ - ТПО_AT Урок 9. Практика: от тест-кейса к авто-тесту

Домашнее задание

24 of 25

Вопросы и комментарии

  1. ООП: классы, объекты, поля, методы +++
    1. В частность рассказать подробней про наследование и как Chrome, Firefox наследуется от WebDriver.
  2. Опрос - про время доп. занятий
  3. Опрос - надо ли повторять HTML?
  4. Добавить скриншот для скачивания драйверов.
  5. Конкатенация строк

25 of 25

AT-Python-09-ДЗ

Задание-1: Автоматизируйте такой тест-кейс:

  1. Зайти на страницу "Рублёвый перевод: расчёт комиссии" http://92.51.36.108:7777/sl.qa/fc/v01/index.php

Ожидаемый результат: Заголовок (title) страницы равен "Рублёвый перевод: расчёт комиссии"

  • Указать сумму перевода: 100
  • Нажать кнопку "Рассчитать"

Ожидаемый результат: Комиссия равна 10

Обратите внимание, что на этой странице для значения комиссии есть специальный элемент.

Задание-2 (*): Прочитайте материалы академии: https://top-academy.site/тпо_at-урок-7-введение-в-selenium-и-основы-pytest/ - ТПО_AT Урок 9. Практика: от тест-кейса к авто-тесту

Задание-3 (*): Напишите ручные тест-кейсы для страницы "Рублёвый перевод: расчёт комиссии". В любом формате: от простого текста (как в задании-1), до проекта в TestIT; также можно в Google.таблицах или Google.документах.

Задание-4 (*): Адаптируйте эти ручные тест-кейсы для автоматизации (см. материалы академии в задании-2).

Задание-5 (*): Напишите по этим тест-кейсам автотесты.