Seleno atvirojo kodo programinės įrangos rinkinys naudojamas programoms tikrinti automatiniu režimu ir interneto išteklių administravimui (lokaliai arba tiesiogiai tinkle). Seleno įrankiai automatizuoja naršyklės veiksmus – pagreitina programinės įrangos kūrimo procesą, sutrumpina testavimo ir derinimo laikotarpį bei pagerina programų kokybę.
Sužinokime, kokias funkcijas ir privalumus turi Selenas, kaip įdiegti ir konfigūruoti programą, kaip rašyti testus ir kaip juos paleisti.
Kas yra selenas
Į rinkinio programų sąrašą įeina: „Firefox“, „Chrome“ ir kitų naršyklių papildinys, vieninga kūrimo aplinka su vartotojo veiksmų įrašu IDE, atnaujinta naršyklės valdymo biblioteka „Selenium WebDriver“, „Grid“ grupė. serveriai ir kiti įrankiai.
Selenas yra daug funkcijų turintis žiniatinklio programų testavimo pagrindas, kuriame įdiegtas naujoviškas programų patvirtinimo metodas, ty galutinio produkto vertinimo procesas. „Selenium Java“ ir „Python“ įjungia dinaminį patvirtinimo ir testavimo mechanizmą, kai vykdomas kodas.
Pagrindinis „Selenium“ pranašumas yra tas, kad skirtingai nei kiti žiniatinklio paslaugų testavimo įrankiai, skatinantys HTTP užklausas, jis veikia pagal naršyklės algoritmą. Automatinio testavimo metu Selenium iš tikrųjų paleidžia naršyklę ir atlieka visus veiksmus, kuriuos vartotojas atliktų dirbdamas su programa.
Kitas „Selenium“ skirtumas nuo kitų programų yra tas, kad šios aplinkos įrankiais testus gali rašyti ne tik programuotojai, bet ir paprasti vartotojai. Esmė ta, kad testai gali būti parašyti kaip kodas ir kaip tinkančios lentelės. Testų rinkinys paleidžiamas naudojant ANT įrankį arba nuolatinės integracijos aplinkoje.
Pagrindinis „Selenium“ produktas yra „WebDriver“ biblioteka, skirta naršyklės valdymui. Tai apima tvarkyklių šeimą, skirtą populiariausioms naršyklėms – Firefox, Edge, Chrome, Opera ir kt. Tai taip pat apima klientų bibliotekas, skirtas bendrauti su vairuotojais įvairiomis kalbomis. WebDriver veikia su naujausiomis programavimo kalbomis – Java, C#, Python, JavaScript ir kt.
WebDriver algoritmas yra paprastas – jis tiesiogiai siunčia komandas naršyklei naudodamas savo valdymo sąsają ir iš karto gauna testo rezultatus. Tai yra, jis naudoja veiksmo metodą, kuris yra kuo artimesnis vartotojo elgesiui.
Būdamas veiksmingas automatizavimo įrankis, „Selenium“ Java ir Python versijose imituoja tokius veiksmus kaip įvairių elementų spustelėjimas, teksto įvedimas, nuorodų spustelėjimas ir kitos veiklos rūšys. Iš esmės naudojant Selenium WebDriver paleidžiamas robotas, kuris atlieka visas rankines operacijas su programa automatiniu režimu.
Ekspertai ir vartotojai pabrėžia šiuos seleno pranašumus:
- palaikymas visoms populiarioms programavimo kalboms, įskaitant „Java“ ir „Python“, todėl šis įrankis yra populiarus tarp daugybės kūrėjų ir vartotojų;
- kelių naršyklių testavimas – testus galima vykdyti visose populiariose naršyklėse, o tai užtikrina platų produktų suderinamumą;
- integracija su kitais įrankiais (pvz., Jenkins), kuri leidžia automatizuoti testavimą kaip kūrimo proceso dalį.
Kadangi Selenas puikiai modeliuoja tikrų vartotojų elgesį, jis dažnai naudojamas tikrinant, ar jis atitinka auditorijos lūkesčius ir reikalavimus. Tai gana lankstus įrankis, kuris sklandžiai integruojasi su įvairiomis testavimo sistemomis ir daugeliu testavimo metodų. Taigi kūrėjas gali bet kada išplėsti savo įrankių rinkinį ir naudoti biblioteką siauresnėms užduotims, pavyzdžiui, našumo testavimui.
Testavimas su selenu buvo naudojamas ir tobulinamas nuo 2004 m. Per 20 metų jis tapo plačiausiai paplitusiu interneto programų testavimo įrankiu. Jį naudoja ir paprasti kūrėjai vietinėms užduotims spręsti, ir didžiulės korporacijos, įskaitant „Google“.
Seleno diegimas ir konfigūravimas
Biblioteka gali būti naudojama kartu su Java, Python ir kitomis kalbomis. Panagrinėkime variantą naujausios versijos Python pavyzdyje.
Visų pirma, Seleno biblioteka yra susieta su Python. Tai atliekama naudojant Selenium Python API, kuri suteikia prieigą prie visų WebDriver funkcijų.
Komponentų diegimas prasideda įkeliant Python į darbo mašiną. Pirmiausia turite eiti į oficialų programavimo kalbos šaltinį ir atsisiųsti savo operacinės sistemos (pvz., „Windows“) diegimo programą. Diegimo proceso metu nepamirškite pažymėti langelių, kad į sistemos kintamuosius įtrauktumėte reikiamus komponentus. Toliau įdiegiama pati Seleno biblioteka.
Bendraujant su Python, tai atliekama naudojant komandą konsolėje:
pip install selenium
Kuriant programas reikia naudoti integruotą kūrimo aplinką, tačiau kodą galima parašyti ir standartinėje teksto rengyklėje. Galite pasirinkti PyCharm aplinką, kuri laikoma populiariausia ir patogiausia
Norint išbandyti naršyklėje, be Seleno, jums reikės žiniatinklio tvarkyklės. „Chrome“ atveju tai yra „ChromeDriver“ – jos versija turėtų atitikti dabartinę naršyklės versiją.
Kitas žingsnis yra sukurti pirmąjį scenarijų naudojant tvarkyklę. Norėdami tai padaryti, atidarykite kūrimo aplinką (mūsų atveju PyCharm) ir sukurkite naują projektą, nurodydami jo pavadinimą ir spustelėdami Sukurti.
Pirmasis bandymas gali atrodyti taip:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ("enable-logging"))
driver = webdriver.Chrome(options=options, executable_path=r'.../chromedriver')
driver.get("https://www.saucedemo.com/")
input_username = driver.find_element_by_id("user-name")
if input_username is None:
print("Element was found")
else:
print("Element not found")
Tada įdiekite „Selenium“ į projektą naudodami komandą „Įdiegti seleno paketą“. Jei visi veiksmai bus teisingi, naršyklė bus paleista. Pranešimas „elementas rastas“ yra sėkmingo Python scenarijaus paleidimo rezultatas.
Tada galite sukurti algoritmus, reikalingus programos elementams išbandyti. Tai gali būti vartotojo autentifikavimo atvejis internetinės parduotuvės puslapiuose – jis įveda teisingą prisijungimo vardą bei slaptažodį ir patenka į pagrindinį puslapį. Kitos programos išbandomos panašiai.
Darbo su selenu pagrindai
Seleno įrankiai aptinka įvairius žiniatinklio paslaugų komponentus ir sąveikauja su jais.
Pavyzdžiui, elementą galite rasti naudodami identifikatorius. Tai padės ši komanda:
element = driver.find_element_by_id (“expame_id”)
Yra ir kitų paieškos organizavimo būdų – pagal pavadinimą (by_name), pagal klasę (class_name), pagal žymą (tag_name).
Tai jokiu būdu nėra baigtinis galimybių sąrašas. Yra ir kitų būdų, kaip ieškoti komponentų puslapyje, tačiau aukščiau išvardinti naudojami dažniau nei kiti.
Sąveikavimui su elementais naudojamos specialios komandos. Pavyzdžiui, įvesti tekstą į atitinkamą lauką ir paspausti (spustelėti) mygtuką. Šiuo tikslu naudojamos send_keys ir click komandos.
input_field = driver.find_element_by_id("input_example")
input_field.send_keys("Hello, Selenium!")
button = driver.find_element_by_id("submit_button")
button.click()
Asinchroninių elementų laukimas ir apdorojimas
Reikalingų prekių paieškos testavimas internetinės parduotuvės puslapyje ir rastos prekės įdėjimas į krepšelį yra įprastas veiksmas, kuris įgyvendinamas daugelyje interneto paslaugų. Dėl algoritmo konsolėje rodomas pranešimas, kad prekė įdėta į krepšelį.
Tačiau praktikoje susiduriame su dažna problema, kai rinkdamiesi prekę iškart paspaudžiame ant krepšelio, tačiau norimas veiksmas neįvyksta. Jei internetas lėtas arba atsakymas iš serverio per ilgas, į krepšelį niekas nededama. Norint išspręsti šią problemą, reikia laukimo laiko.
„Selenium WebDriver“ turi dviejų tipų lūkesčius – aiškius ir numanomus (aiškus ir numanomas). Esant aiškiems lūkesčiams, racionaliai išnaudoti testo vykdymo laiką padės specialios technikos: nustatomas minimalus laukimo laikas, po kurio elementas grąžinamas, jei įkeliamas anksčiau nei numatyta.
Aiškių lūkesčių pavyzdys yra toks:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable(
(By.XPATH, '//*(@id=\"page_wrapper\")/footer/ul/li(2)/a')
)
)
Laukimas trunka 10 sekundžių – jei per šį laiką prekė tampa prieinama, galite ją spustelėti. Jei jis nebuvo įkeltas, pateikiama TimeoutException išimtis.
Netiesioginis laukimas veikia pagal kitą scenarijų. Jie nustatomi vieną kartą tvarkyklei, bet ne kiekvienam komponentui. Netiesioginis laukimas suaktyvinamas, kai Seleno testams nepavyksta rasti komponento. Pasibaigus nustatytam laikui, taip pat sukuriama TimeoutException išimtis. Šis metodas yra mažiau lankstus ir gali padidinti bendrą bandymų laiką.
Vienas iš netiesioginio laukimo pavyzdžių:
driver.implicitly_wait(10)
Taigi, aiškūs lūkesčiai atliekant bandymus yra geresnis pasirinkimas.
Parametrų nustatymas ir testų vykdymas skirtingose naršyklėse
„Selenium Grid“ klasteris naudojamas nuotoliniam kelių naršyklių tinklui skirtinguose kompiuteriuose valdyti ir organizuoti. Tokiu būdu kūrėjai atlieka lygiagrečius testavimus, kurie žymiai sutaupo jų laiką.
Grid yra Selenium bibliotekos dalis, sukurta specialiai lygiagrečiam paleidimui. Procesas įgyvendinamas nukreipiant naršyklės komandas, o serveris tampa centru ir yra sukonfigūruotas atlikti testus.
Seleno tinklelio architektūra susideda iš šakotuvo ir mazgo (Hub and Node). Hub yra centras, kuriame įkeliami visi testai. Kiekviename tinkle yra tik vienas šakotuvas, kuris veikia viename įrenginyje.
Mazgai yra seleno įrankio egzemplioriai, kurie atlieka į šakotuvą įkeltus testus. Tinkle gali būti keli mazgai, jie gali būti paleisti skirtinguose įrenginiuose su skirtingomis naršyklėmis.
„Hub-node“ koncepcija apima bandymo paleidimą viename įrenginyje ir jo vykdymą keliuose mazguose.
Scheminis seleno tinklelio konfigūracijos algoritmas yra toks:
- Selenium Grid atsisiuntimas iš oficialios projekto svetainės.
- Failo Selenium Server.jar įdėjimas į bet kurį standžiojo disko aplanką.
- Pagrindinio įrenginio šakotuvo paleidimas. Tai atliekama per komandinę eilutę.
- Stebulės paleidimas pagalbiniuose įrenginiuose.
- Veiksmai „Selenium Grid“ tinkle konfigūruoti.
Klasteris naudojamas, kai bandymus reikia paleisti skirtingose naršyklėse, OS ir keliuose įrenginiuose. Toks testavimas užtikrina, kad bandoma programa bus suderinama su bet kokiomis sistemomis ir kompiuteriais. Tuo pačiu metu kūrėjas sutaupo laiko vykdydamas testus.
Praktinės rekomendacijos ir geriausia praktika
Keli vertingi patyrusių kūrėjų patarimai padės efektyviau naudoti Selenium Grid.
Naudojant POM – puslapio objekto modelį
POM projektavimo modelio taikymas padeda organizuoti bandomąjį kodą, atskiriant jo logiką ir sąveikos su tinklalapiu logiką. Šis metodas pagerina skaitomumą ir palaiko kodą, todėl pakeitus puslapį lengviau atnaujinti testus.
POM yra dizaino modelis Selenium aplinkoje. Jis naudojamas objektų saugyklai, kurioje saugomi visi žiniatinklio elementai, sukurti. POM naudojimas sumažina kodo dubliavimosi riziką ir pagerina testavimo palaikymą.
CI/CD integracija
Nuolatinės integracijos ir pristatymo sistemos užtikrina, kad testai būtų automatiškai suaktyvinami, kai tik pasikeičia. Šis sprendimas užtikrina aukštą produkto kokybę ir leidžia greitai rasti klaidas. Populiariausi CI / CD įrankiai yra „Jenkins“, „GitLab CI“ ir daugelis kitų.
Kodo organizavimas
Norėdami pagerinti kodo skaitomumą ir palaikymą, patyrę kūrėjai rekomenduoja padalyti testus į kelis loginius blokus ir naudoti klases bei funkcijas. Taip bus lengviau valdyti testus ir pakartotinai naudoti kodą.
Lygiagretus vykdymas
Norint pagreitinti testo vykdymą, naudojamas lygiagretusis testavimas naudojant seleną. Tai atliekama naudojant tokias sistemas kaip Pytest arba TestNG. Lygiagretus vykdymas leidžia vienu metu paleisti kelis testus – šis metodas žymiai sumažina bendrą testavimo laiką.
Seleno serveris
Selenium Server skirtas nuotoliniam naršyklių valdymui. Jis palaiko WebDriver komandas, veikiančias pagal nustatytą algoritmą:
- Įrenginyje, kuriame turi būti sukonfigūruota naršyklė, įdiegiamas ir paleidžiamas serveris.
- Kitame įrenginyje vartotojas paleidžia „RemoteWebDriver“ tvarkyklės programą. Ši programa prisijungia prie serverio pirmame įrenginyje ir siunčia jam komandas Java arba Python.
- Serveris suaktyvina naršyklę ir veikia per naršyklę atitinkančią tvarkyklę.
Naudojant IDE įskiepį
Sukurti specialūs įskiepiai, kurie supaprastina darbą su „Mozilla“ ir „Chrome“. Papildinys įrašo vartotojo veiksmus, tada juos atkuria ir sugeneruoja programos kodą Java, C#, Python ir kitomis kalbomis WebDriver. Tada bibliotekos kartoja procesą.
Papildinys yra Selenium plėtra, sukurta specialiai produktyviems veiksmams su tinklalapio testavimo scenarijumi. Pagrindinis IDE pliusas yra galimybė įrašyti ir išsaugoti testus, kad būtų galima juos apdoroti ateityje.
Seleno IDE yra veiksmingas derinimo testavimo mechanizmas naudojant bandomuosius atvejus. Tuo pačiu metu bandomieji atvejai gali būti pakartotinai vykdomi kitose bylose.
Rezultatai
Žiniatinklio programų testavimo automatizavimas naudojant seleną yra didžiulė tema, kurios negalima išsamiai aptarti viename straipsnyje. Efektyvus darbas su bibliotekomis ir įrankiais pasiekiamas praktiškai, todėl svarbu daugiau laiko skirti praktiniam mūsų straipsnyje minimų metodų pritaikymui. Darbas su Selenu taupo laiką, taupo kūrėjus nuo įprastų užduočių ir pagreitina švaraus ir teisingo kodo rašymą.
Jei tekste radote klaidą, siųskite pranešimą autoriui pažymėdami klaidą ir paspausdami Ctrl-Enter.