Skip to content

viktorbem/okay-tests-v2

Repository files navigation

Okay Selenium Testy

Aplikace určená k testování produkčních webů společnosti OKAY s.r.o.


Závislosti

K běhu aplikace je potřeba mít v počítači nainstalovaný Python 3.8 a vyšší. Také je potřeba splnit závislosti definované v souboru requirements.txt. Testy běží v prohlížeči Google Chrome, je tedy potřeba mít nainstalovaný nejen tento prohlížeč, ale také aplikaci Chromedriver - dostupná zde.


Instalace

Aplikaci stáhněte z tohoto repozitáře, případně vytvořte kopii repozitáře na svém počítači / serveru. Před prvním spuštěním je potřeba nainstalovat potřebné balíčky:

pip install -r requirements.txt

Následně je potřeba vytvořit kopii souboru config_sample.json a změnit nastavení.

cp config_sample.json config.json
{
    "defaults": {
        "delay": 10,            // čas mezi úkony (sec)
        "is_headless": 0,       // render v paměti (bool)
        "is_email": 0,          // notifikace email (bool)
        "is_slack": 0,          // notifikace slack (bool)
    },
    "secrets": {
        "mail_to": "",          // mail pro notifikaci
        "mail_from": "",        // google mail pro odesílání
        "mail_password": "",    // heslo k tomuto mailu
        "slack_token": "",      // API token do slacku
        "slack_channel": ""     // ID kanálu ve slacku
    },
    "creds": {
        "www.okay.cz": {        // url adresa eshopu
            "sid": "",          // id (středisko) prodejce
            "pass": ""          // osobní heslo prodejce
        }
    }
}

Pokud chcete testy spouštět automaticky, je potřeba nastavit CRON.


Jak nainstalovat chromedriver na linuxovy server

Součástí repozitáře je skript get_chromedriver.sh, pomocí kterého snadno stáhnete a "nainstalujete" chromedriver, který je potřeba pro běh testů na linuxovém serveru. Pokud jej chcete použít, je potřeba jej nastavit jako spustitelný:

sudo chmod +x get_chromedriver.sh

Následně jej můžete použít takto:

sudo ./get_chromedriver.sh [DOWNLOAD_URL]

Místo [DOWNLOAD_URL] je potřeba doplnit odkaz na aktuální verzi chromedriveru. Podle vaší verze prohlížeče jej najdete zde. Stejný postup potom použijete i v případě aktualizace chromedriveru.


Jak psát testy

Pro testování jsou k dispozici dvě třídy, a sice OkayTest a JenaTest - zvolte si tu, která odpovídá testované stránce. Testy píšete v Pythonu pomocí jednoduchých metod.

Příklad:

from okay_tests import OkayTest

test = OkayTest(name="okaysk_menu")
test.open_url(url="https://www.okay.sk/")
test.open_random_menu_items(3)
test.open_random_footer_items(3)
test.abort()

Při inicializaci testu je možno použít několik volitelných argumentů, které mohou změnit chování testu. Zde jsou nejdůležitější z nich:

test = OkayTest(
    name="okaysk_menu",     # vlastní název testu
    theme="120943050794",   # ID šablony v Shopify
    is_mobile=True,         # aktivuje emulátor mobilu
    delay=5                 # změní výchozí čas mezi úkony
)

Použitelné metody (abecedně)

Všechny níže uvedené metody jsou použitelné jak pro třídu OkayTest i JenaTest.


abort

Zavře prohlížeč a ukončí probíhající test.

test.abort()

add_to_cart

Přidá aktuální produkt do košíku. Aby metoda fungovala, musí se test zrovna nacházet na detailu nějakého produktu.

test.add_to_cart()

check_css

Porovná hodnotu css stylu daného html elementu. Používá se pro kontrolu správného načtení css souboru.

test.check_css(element=".header--search-focus", style="background-color", value="rgba(26, 77, 150, 1)")

Všechny argumenty jsou povinné.

check_insurances

Pokusí se zaškrtnout konkrétní druhy pojištění v košíku a následně vytvoří printscreen košíku. Je potřeba definovat pojištění jako list (pole) obsahující product ID těchto pojištění.

test.check_insurances(insurances=["6797255966762", "6797255901226"])
test.check_insurances(insurances=["6797255573546"])

Argument insurances je povinný.


check_services

Pokusí se zaškrtnout nábytkové služby v košíku a následně vytvoří printscreen košíku. Je potřeba definovat služby jako list (pole) obsahující variant ID těchto služeb.

test.check_services(services=["40968686796951", "40968686829719"])
test.check_services(services=["40968686928023"])

Argument services je povinný.


choose_delivery

Zvolí druh dopravy definovaný argumentem delivery, pokud zároveň neobsahuje text v argumentu exclude. Je potřeba, aby se test zrovna nacházel ve fázi volby dopravy.

test.choose_delivery(delivery='na moju adresu', exclude='mastercard', proceed=True)

Argument delivery je povinný a musí odpovídat způsobu dopravy na daném webu. Argument exclude je nepovinný a slouží k přesnějšímu určení jednoho ze dvou podobných druhů doprav. Argument proceed je nepovinný a pokud jej nastavíte True, bude test pokračovat k volbě platby (výchozí hodnota je False).


choose_payment

Zvolí druh platby definovaný argumentem payment. Je potřeba, aby se test zrovna nacházel ve fázi volby platby.

test.choose_payment(payment='na moju adresu', proceed=True)

Argument payment je povinný a musí odpovídat způsobu platby na daném webu. Argument proceed je nepovinný a pokud jej nastavíte True, bude test pokračovat a dokončí objednávku (výchozí hodnota je False).


confirm_order

Slouží k ověření, zda byla objednávka úspěšně dokončena. Ověření proběhne tím, že se test pokusí kliknout na prvek na thank-you stránce.

test.confirm_order()

empty_cart

Otevře aktuální košík a smaže všechny položky v něm. Tato metoda nevyvolá žádnou chybu v případě, kdy bude košík prázdný.

test.empty_cart()

fill_form_fields

Vyplní jednotlivá pole ve formuláři. Pole, která se mají vyplnit, jsou specifikována argumentem fields, což je list (pole) obsahující dictionary s klíči id a value (viz příklad).

test.fill_form_fields(fields=[{"id": "name", "value": "Josef"}], proceed=True)

Argument fields je povinný. Argument proceed je nepovinný a pokud jej nastavíte True, bude test pokračovat a odešle formulář (výchozí hodnota je False).


find_element

Vrátí první element na stránce, který odpovídá CSS selectoru specifikovanému řetězcem v argumentu selector.

element = test.find_element(selector=".button--add-to-cart")

Argument selector je povinný.


find_elements

Vrátí list (pole) elementů na stránce, které odpovídají CSS selectoru specifikovanému řetězcem v argumentu selector.

elements = test.find_elements(selector=".button--add-to-cart")

Argument selector je povinný.


find_child_element

Vrátí prvního potomka elementu v argumentu, který odpovídá specifikovanému CSS selectoru.

child = test.find_child_element(
    element=some_element,
    selector='.tag.on-order'
)

Oba argumenty jsou povinné.


find_child_elements

Vrátí list (pole) potomků konkrétního elementu, které odpovídají specifikovanému CSS selectoru.

children = test.find_child_elements(
    element=some_element, 
    selector='.tag.on-order'
)

Oba argumenty jsou povinné.


get_random_words

Vrátí seznam náhodných výrazů použitelných ve vyhledávání. Délka tohoto seznamu odpovídá číslu v argumentu items.

words = test.get_random_words(items=3)

Argument items je povinný.


goto_checkout

Pokračovat z košíku do checkoutu. Pokud se zrovna nenacházíte v košíku, tato metoda jej otevře za vás. Zároveň vyplní všechny potřebné zákaznické detaily (pokud jsou potřeba) a pokračuje k volbě dopravy.

test.goto_checkout()

Můžete použít také další argumenty, které specifikují osobní údaje testovacího uživatele. Tyto argumenty jsou email, name, surname, street, zipnr, city and phonenr.

- test.goto_checkout(email='testovac@seznam.cz', zipnr='73953')

handle_gopay

Projde platební bránou gopay až po zadání čísla karty a potom se vrátí zpět do eshopu, čímž stornuje objednávku.

test.handle_gopay()

log_results

Za vstup vezme list (pole), které se skládá z libovolného počtu dictionary a uloží je jako výstup do souboru.

test.log_results(
    name='(2) Do 50 kg', 
    url='https://www.okay.sk/collections/mikrovlnne-rury-a-mini-rury',
    logs=[
        {'Zásielkovňa': '1,00 €', 'Doručiť na moju adresu': '2,00& €'},
        {'Bankový prevod': '-', 'Dobierka': '0 €', 'Platba na výdajni': '-'}
    ]
)

Všechny argumenty, tedy name, url a logs jsou povinné.


login_seller

Přihlásí uživatele do prodejní (tabletové) aplikace s pomocí uložených údajů. Tyto údaje by měly být uloženy v souboru config.json, viz výše.

test.login_seller()

new_test

Tuto metodu je vhodné používat ve všech for a while smyčkách na začátku každé iterace. Nastaví výchozí hodnoty testu během jednotlivých iterací, vyčistí cache a cookies.

test.new_test()

open_product

Najde na stránce první nejprodávanější produkt skladem. Pokud takový produkt neexistuje, vybere první produkt v kolekci při aktuálním řazení.

test.open_product()

open_random_menu_items

Vezme seznam všech položek v hlavním menu, náhodně klikne na tolik, kolik je definováno argumentem items a pořídí printscreeny. Můžete přidat nepovinný argument limit, ktery omezí počet položek menu pouze na prvních N.

test.click_random_mainmenu_items(items=3, limit=5)

Argument items je povinný. Argument limit je nepovinný.


open_random_footer_items

Vezme seznam všech položek v patičkovém menu, náhodně klikne na tolik, kolik je definováno argumentem items a pořídí printscreeny.

test.click_random_footer_items(items=3)

Argument items je povinný.


open_specific_menu_item

Otevře položku v hlavním menu, která odpovídá řetězci zadanému argumentem text.

test.click_specific_mainmenu_item(text='Televízory')

Argument text je povinný.


open_url

Otevře webovou stránku definovanou argumentem url.

test.open_url(url='https://www.okay.sk/')

Argument url je povinný.


parse_delivery

Vyčte seznam všech způsobů dopravy a vrátí jej jako dictionary.

delivery = test.parse_delivery()

parse_payment

Vyčte seznam všech platebních metod a vrátí jej jako dictionary.

payment = test.parse_payment()

search_for

Vyhledá frázi definovanou argumentem text.

test.search_for(text='mobilný telefón')

Argument text je povinný.


select_pickup_point

Vybere prodejnu nebo výdejnu z widgetu prodejen. Pokud chcete zvolit konkrétní prodejnu nebo výdejnu, zadejte její kód v argumenty code, v opačném případě se vybere prodejna náhodně. Druhý argument proceed určuje, zda bude test pokračovat do dalšího kroku objednávky.

test.select_pickup_point(proceed=True)
test.select_pickup_point(code='1046', proceed=False)

Oba argumenty jsou volitelné, výchozí hodnota argumentu proceed je False.


send_offer

Odešle obsah košíku nabídkou na email zadaný v argumentu email.

test.send_offer(email="test@test.cz")

Argument email je povinný.


set_filter

Nastaví filtr v kolekci podle jeho jména name a hodnoty value.

test.set_filter(name='výrobcovia', value='lg')

Oba argumenty jsou povinné.


Poznámky

Každá metoda, kterou můžete v testu použít, má navíc možnost zadání argumentu screenshots. Pokud je tento argument nastaven False, v průběhu této metody nebudou pořízeny žádné printscreeny (výchozí hodnota je True).

Příklad:

test.click_random_mainmenu_items(items=3, screenshots=False)

Další příklady

Součástí repozitáře jsou také spubory *__samples.py, které obsahují základní baterii testů. Můžete je použít jako referenční příklady při psaní vlastních testů.

About

Automated tests for OKAY websites in Python (Selenium) - user friendly version.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published