Testowanie i Jakość Oprogramowania

L#12: Selenium.

Wprowadzenie

Selenium to biblioteka języka Python służąca do automatyzacji przeglądarek internetowych. Pozwala na sterowanie przeglądarką, symulowanie działań użytkownika oraz testowanie aplikacji webowych.

Do czego wykorzystujemy Selenium?

Co można testować przy pomocy Selenium?

Instalacja potrzebnych paczek

pip install selenium webdriver-manager

Przydatne zasoby

Cel

Celem laboratorium jest zapoznanie się z biblioteką Selenium oraz procesem automatyzacji testów webowych w języku Python. Zdobędziesz praktyczne umiejętności pozwalające na tworzenie skryptów, które automatycznie weryfikują działanie aplikacji w przeglądarce, bazując na wcześniej przygotowanych przypadkach testowych.

Zadanie - Selenium

Na podstawie zaprezentowanych poniżej przykładów kodu napisz testy automatyczne dla aplikacji udostępnionych na poprzednim laboratorium. Wykorzystaj bibliotekę Selenium oraz język Python.

Twoim zadaniem będzie zaimplementowanie testów, które będą weryfikowały przypadki testowe oraz zgłoszone błędy (bug reports). Skup się na automatyzacji scenariuszy testowych, które zostały utworzone podczas poprzedniego laboratorium.

Przykłady implementacji testów automatycznych

Poniżej znajdziesz gotowe skrypty, które pomogą Ci zrozumieć podstawowe mechanizmy i rozpocząć pracę.

Weryfikacja nagłówka strony

Prosty test weryfikujący obecność i treść nagłówka H1 na przykładowej stronie.

import unittest
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager



class TestWebPage(unittest.TestCase):
    def setUp(self):
        """
        Inicjalizacja testu - uruchomienie przeglądarki Chrome
        """
        self.service = Service(ChromeDriverManager().install())
        self.driver = webdriver.Chrome(service=self.service)

    def test_page_heading(self):
        """
        Test sprawdzający obecność (assertIsNotNone) i zawartość (assertEqual) nagłówka na stronie
        """
        # Given
        self.driver.get('https://example.com')

        # When
        heading = self.driver.find_element(By.TAG_NAME, 'h1')

        # Then
        self.assertIsNotNone(heading)
        self.assertEqual(heading.text, "Example Domain")

        # Zatrzymanie przeglądarki na 3 sekundy (do celów edukacyjnych)
        time.sleep(3)

    def tearDown(self):
        """
        Zakończenie testu - zamknięcie przeglądarki
        """
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

Obsługa formularza kalkulatora

Test wprowadzający dane do formularza i weryfikujący wynik działania kalkulatora.

import unittest
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


class TestCalculator(unittest.TestCase):
    def setUp(self):
        """
        Inicjalizacja testu - uruchomienie przeglądarki Chrome i otwarcie strony kalkulatora
        """
        self.service = Service(ChromeDriverManager().install())
        self.driver = webdriver.Chrome(service=self.service)
        self.driver.get('https://tgadek.pl/app/tijo-calc/prod/index.html')

    def test_addition(self):
        """
        Test sprawdzający działanie operacji dodawania w kalkulatorze
        """
        # Given
        number1 = self.driver.find_element(By.ID, "number1")
        number1.send_keys("1")
        number2 = self.driver.find_element(By.ID, "number2")
        number2.send_keys("2")

        # When
        self.driver.find_element(By.CSS_SELECTOR, "input[type='button']").click()

        # Then
        result = self.driver.find_element(By.ID, "result").text
        self.assertEqual(result, "1 + 2 = 3")

        # Zatrzymanie przeglądarki na 3 sekundy (do celów edukacyjnych)
        time.sleep(3)

    def tearDown(self):
        """
        Zakończenie testu - zamknięcie przeglądarki
        """
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

Podsumowanie

Automatyzacja testów za pomocą narzędzi takich jak Selenium znacznie przyspiesza proces weryfikacji oprogramowania, szczególnie przy powtarzalnych testach regresyjnych (testy weryfikujące, czy nowo wprowadzony kod nie popsuł działających już funkcji).

Strona główna