QA Automation курс

Публікуємо Автоматизований тест Python + Selenium WebDriver з надзвичайно прикольного сайту присвяченого суто автоматизованому тестуванню autotest.org.ua ➡ обов’язково завітайте в гості, не пошкодуєте. Уся інформація на сайті подається просто і максимально розжовано.

Саме цей автотест став мені у нагоді, під час навчання на курсі Автоматизованого тестування Python від нашої спільноти тестерів QualityAssuranceGroup.

Для тестування свого навчального проекту я його переробляла згідно своїх цілей: заміною XPath на свої веб елементи і додала негативний сценарій логування. Але викладаю не свій варіант, а у перекладі автора. Так буде краще, на мою думку, бо кожен зможе спробувати його повторити на загальнодоступному сайті. Потрібно тільки зареєструватися і створити скриньку на ukr.net

Поїхали! Розпочинаємо наш автоматизований тест з попередньої підготовки мінімальної інфраструктури.

1.Установка Python. Я як і первинний автор статті користуюся ОС Linux Ubuntu. А в операційній системі Ubuntu, Linux Python встановлений за замовчуванням. Причому як 2 -га, так і 3 -тя версії. Для перевірки наявності 3 -ої версії в терміналі потрібно виконати команду python3. Використовуватиму новішу версію, сьогодні всі рекомендують розпочинати вивчення мови програмування Python саме з 3 -ої версії. Старі версії поки що ще підтримуються використовують, тільки для підтримки застарілого коду.

Python Unit Тестування

Поява трьох стрілок внизу свідчить, що запущений сеанс інтерпретатора. Зараз він мені не потрібен, для виходу з нього клацаю Exit () і Enter.

2. Для створення проекту автотесту та підключення потрібних бібліотек в Python використовують Pip (система управління пакетами) і virtualenv (з його допомогою створюють віртуальні оточення з пакетами (бібліотеками), для окремих проектів, щоб не встановлювати той самий Selenium глобально, а встановити його в папці з проектом для автотесту). В Ubuntu ці інструменти вже встановлені, якщо у Вас також, можете перевірити версію:

Ви без проблем можете пошукати інструкції інсталювання в інтернеті, там все дуже просто на кілька команд в терміналі. Спочатку ставиться pip, а потім з його допомогою virtualenv.

Переходимо до створення простого проекту для тесту:

1. Створюємо папку first_test потім заходимо в неї:

2. Усередині цієї папки за допомогою virtualenv створюємо віртуальне оточення з назвою env_test:
create-env-virtualenv

3. Для початку роботи у віртуальному середовищі потрібно його активувати. Робиться це за допомогою команди source env_test/bin/activate. Якщо Ви назвали Ваше віртуальне оточення інакше, ніж env_test, то підставте цю назву в команду замість тієї що на скріншоті:

Поява спочатку рядка в терміналі напису в дужках (env_test) говорить нам про те, що віртуальне оточення Python активоване.

4. Перебуваючи всередині активного віртуального оточення Python за допомогою pip встановлюємо всередині проекту Selenium. Командою pip install selenium:

5. Для перевірки встановлених у віртуальному оточенні пакетів можна виконати команду pip list:

Як видно на скріншоті, встановлено 4 пакети, серед яких є потрібний нам Selenium. Три інших пакети були встановлені автоматично, під час створення віртуального оточення (вони не мають відношення конкретно до тестів). Якщо вийти з віртуального оточення і виконати команду pip list, то список пакетів у буде значно більший. А у віртуальному оточенні на даний момент знаходиться все потрібне для написання тестів.

Отже, можна розпочинати писати сам автотест на Python:

Запускаю cвій PyCharm (IDE середовище розробки, типу редактора коду для мови Python) і в ньому просто відкриваю папку first_test:

Всередині міститься директорія з віртуальним середовищем — env_test. Звісно створювати папку проекту й віртуального середовища можна не тільки через термінал, але й шляхом створення усередині самого середовища IDE.

Також усередині проекту створюємо папку tests, у якій зберігатимемо модулі python з автотестами. Тестувати ми будемо разом з Вами форму логування з паролем пошти ukrnet. Для нашого коду тесту створюємо в папці tests файл (модуль) python і називаю його login_test:

Для Юніт тестів мені знадобиться підключення бібліотеки unittest.

Робиться це рядком:

import unittest

Пакет Unittest бібліотеки входить до складу Python за замовчуванням, тому не було необхідності встановлювати його через pip в віртуальне оточення.

Далі з пакета Selenium імпортуємо модуль webdriver:

from selenium import webdriver

Створюємо клас LoginTest і наслідуємо його від класу TestCase з Python бібліотеки unittest. Це необхідно, щоб Python розумів як працювати з нашими тестами:

class LoginTest(unittest.TestCase):

В Python для наслідування від іншого класу потрібно під час оголошення класу вказати ім’я батьківського класу в дужках.

LoginTest буде містити в собі три методи. Визначення методів в Python починається зі слова def:

  • setup ()
  • test_user_login ()
  • tear_down ()

setup () і tear_down () в unittest виконують роль службових методів і викликатимуться автоматично, перед і після кожного тесту в модулі, що запускається. Імена тестових методів повинні починатися з префікса test_, щоб unittest зміг знайти їх під час запуску. В нашому модулі тестовий метод один test_user_login ().

Код методу setup ():

def setUp(self):
    self.driver = webdriver.Chrome(executable_path='/home/user/drivers/chromedriver')
    self.driver.maximize_window()
    self.driver.implicitly_wait(10)

У цьому методі відбувається створення екземпляра WebDriver, а також його налаштування. Задаємо тайм-аут, розгортаємо вікно браузеру.

executable_path = '/home/user/drivers/chromedriver'

— це шлях до драйвера браузера Chrome, який попередньо слід завантажити і розпакувати в папку drivers. Посилання для завантаження ТУТ.

Параметр self в методі є обов’язковим при визначенні методів в класі. Параметр self повинен передувати всім іншим параметрам методу. self містить e собі посилання на екземпляр класу і буде автоматично передаватися при кожному виклику методу пов’язаного з класом. Змінні з префіксом self доступні всім методам в класі.

Код методу tear_down ():

def tear_down(self):
    self.driver.quit()

Цей метод закриває всі активні вікна браузера і завершує його роботу.

Код нашого єдиного тестового методу test_user_login ():

def test_user_login(self):
    driver = self.driver
    driver.get("https://mail.ukr.net/desktop/login")
    login_field = driver.find_element_by_id("id-1")
    login_field.send_keys("autotestorgua")
    password_field = driver.find_element_by_id("id-2")
    password_field.send_keys("testpass")
    button_login = driver.find_element_by_xpath("//*[text()='Увійти']")
    button_login.click()
    user_mail = driver.find_element_by_xpath("//*[@class='login-button__user']")
    assert user_mail.text == "autotestorgua@ukr.net"

На що варто звернути увагу:

driver = self.driver #створення локальної змінної з посиланням на екземпляр WebDriver, який був створений в методі setUp ()

Розглянемо деякі дії під час тесту:

    • login_field = driver.find_element_by_id("id-1") #пошук елемента (в даному випадку по id)
    • login_field.send_keys("autotestorgua") #введення тексту в елемент
      
      
  • button_login.click () #натискання на елемент
  • assert user_mail.text == "autotestorgua@ukr.net" #тут порівнюємо отриманий з елемента текст з очікуваним для перевірки, що авторизація пройшла успішно

Весь код тестового модуля:

import unittest
from selenium import webdriver
 
 
class LoginMailBox(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='/home/user/drivers/chromedriver')
        self.driver.implicitly_wait(10)
 
    def test_user_login_in_mail_box(self):
        driver = self.driver
        driver.get("https://mail.ukr.net/desktop/login")
        login_field = driver.find_element_by_id("id-1")
        login_field.send_keys("autotestorgua")
        password_field = driver.find_element_by_id("id-2")
        password_field.send_keys("testpass")
        button_login = driver.find_element_by_xpath("//*[text()='Увійти']")
        button_login.click()
        user_mail = driver.find_element_by_xpath("//*[@class='login-button__user']")
        assert user_mail.text == "au"
 
    def tear_down(self):
        self.driver.quit()
 
 
if __name__ == "__main__":
    unittest.main()

Зверніть увагу на останні два рядки, вони обов’язкові для запуску тестів з командного рядка (якщо запускати тест з середовища розробки, то вони не потрібні 🙂
if __name__ == “__main__”: перевіряє, що модуль запущений як основна програма, а не як модуль імпортований в інший скрипт. І якщо if поверне true, то буде виконана наступна команда:
unittest.main() надає інтерфейс для запуску тестового модуля з командного рядка. Коли Ви викликаєте в терміналі команди python login_test.py інтерпретатору буде наказано виконати всі тести з зазначеного модуля.

Переходимо до запуску автотесту:

Найпростіший спосіб це з середовища розробки за допомогою клавіш Shift + F10:

Знизу можна побачити підсумок. Тест пройдений! Ура!

Наступний спосіб — це запуск з терміналу. Перебуваючи в директорії з тестами (у нашому випадку tests) набираємо команду виконати: 

python login_test.py

Результат не забариться себе чекати:

Все ОК. Зверніть увагу, що автотести потрібно запускати тільки в активованому оточенні (env_test) про що попереджено з самого початку. Інакше автоматизовані тести не запустяться.

Додам, запуск автотесту з терміналу і деталізація виведення результатів не обмежуються даними способом. Про це вже в наступних постах….

Ось такий вийшов експеримент з написанням автотеста Selenium WebDriver на Python. Пробуйте покроково як на скріншотах. У Вас все вийде. Ми в Вас віримо!

Related posts

3 коментарі

Leave a Comment

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.