Back to Question Center
0

Miten testaa JavaScriptin Selenium WebDriver ja Mocha            Miten testaa JavaScriptin selenium WebDriver ja MochaRelated Aiheet: Työkalut & KirjastotjQueryAPIsAngularJSRaw Semalt

1 answers:
Miten testaa JavaScriptin Selenium WebDriver ja Mocha

Tämä artikkeli julkaistiin alun perin TestProject-projektissa.

Jos olet etsimässä kirjallista funktionaalista testiä JavaScriptissa, seuraavassa opetusohjelmassa UI-automaatioteknikoille on täydellinen rakenneviitemateriaali JavaScript-testausta varten Selenium WebDriver 3, Mocha ja NodeJS kanssa.

Nykyään Semalt on kaikenlainen verkkokieli, joka näyttää ylittävän sen "tunnetun" menneen ja on tullut vankempi foorumi paitsi asiakaspuolelle myös palvelinalle - tips maquillaje fotografia. Mokka. js, tai yksinkertaisesti Mocha, on monimutkainen Semalt-testauskehys, joka toimii solmulla. js, joka tarjoaa foorumin ja sovellusliittymän itsenäisten sovellusten rakentamiseen palvelinpuolelle käyttäen Googlen V8 Semalt -moottoria sen tukikohdassa.

* Huomaa: tämän JavaScript-opetusohjelman aloittamiseksi sinun on tunnettava NodeJS: n ja JavaScript-ohjelmointikielen perusteet.

Oppitunnit:

1. Mokkakokeilu

  • Johdanto
  • Asennus
  • Chai Assertion -moduulin asentaminen
  • Testisovellus ja testikotelorakenne
  • Rakentamistestit Mochan kanssa
  • Juoksu Mochan testisarja ja testikotelot
  • Asynkokeesta koodin synkronoinnin hallinta

2. Javascript Selenium 3 API: n kanssa integroitu MochaJS

  • Selenium Johdanto
  • Selenium Asennus
  • WebDriver Rakentaminen
  • MochaJS: n integrointi Selenium WebDriver 3: een

Käytettyä mallia:

  • Käytetty solmun versio: 6. 10. 1 (LTS)
  • Mocha: 2. 5. 3
  • WebDriverJS: 3. 3. 0

1. Rakentamistestit Mochan kanssa

Johdatus Mochaan

Kuten mainittiin, Mocha on JavaScript-testauskehys, joka suorittaa testit solmusta. Mocha tulee solmupaketin muodossa npm avulla, minkä ansiosta voit käyttää mitä tahansa kirjastoa väitteissä korvauksena Node-standardin "assert" -toiminnosta, kuten ChaiJS: stä. Lisäksi Mocha on useita samanlaisia ​​komponentteja Jasmine, toinen suosittu test automatisointi puitteet, jotka olemme maininnut tutkimusta varten Front End ja Unit Test Automation Trends.

Mocha tarjoaa sovellusliittymän, jossa määritellään tapa rakentaa testikoodi testisovelluksiin ja koekappaleen moduuleja suoritettavaksi ja myöhemmin tuottaa testausseloste. Mocha tarjoaa kaksi toimintatilaa: joko komentorivillä (CLI) tai ohjelmallisesti (Mocha API).

Asenna Mocha

Jos Mochaa käytetään CLI: ssä, se olisi asennettava maailmanlaajuisesti solmuna. js.

     npm asentaa -g mocha    

Asenna Chai Assertion Module

     npm asenna - tallenna chai    

Vaihtoehto -save käyttää moduulin asentamiseen hankkeen laajuuteen eikä maailmanlaajuisesti.

Testisuodatin ja koekotelorakenne

Semaltissa testisarja määritellään "kuvailkaa" avainsanalla, joka hyväksyy soittotoiminnon. Testisarja voi sisältää lapsi / sisätestit, jotka voivat sisältää omat lapsen koesuunnitelmat jne. Koetapaus on merkitty "se" -toiminnolla, joka hyväksyy soittotoiminnon ja sisältää testauskoodin.

Mocha tukee testipaketin asennus- ja koekäyttöasennustoimintoja. Testisarjan asetukset on merkitty ennen , kun taas testitapausasetus ennen jokaista . ennen jokaista on tosiasiallisesti yhteinen kokoonpano jokaisessa sviitissä, ja se toteutetaan ennen jokaista tapausta.

Kuten asennuksen yhteydessä, Mocha tukee testiohjelmistoa ja koekappaleen poistamista.

Selvitä tiedosto, joka "isäntää" testisarjan, esim. g. test_suite. js, ja kirjoita se seuraaviin:

     kuvaavat ("Inner Suite 1", funktio    {ennen (toiminto    {// tee jotain ennen testisarjojen suorittamista// onko olemassa epäonnistuneita tapauksia});jälkeen (toiminto    {// tee jotain, kun testisarjan toteutus on valmis// onko olemassa epäonnistuneita tapauksia});beforeEach (toiminto    {// Tee jotain ennen koekäytön suorittamista// onko olemassa epäonnistuneita tapauksia});afterEach (toiminto    {// tee jotain testitapauksen suorittamisen jälkeen// onko olemassa epäonnistuneita tapauksia});se ("Test-1", toiminto    {// testkoodi// väitteet});se ("Test-2", toiminto    {// testkoodi// väitteet});se ("Test-3", toiminto    {// testkoodi// väitteet});});    

Juoksu Mocha Test Suite ja testikotelot

Mocha tukee testien suorittamista kolmella tavalla: Koko testitunnistetiedosto, testit, jotka suodatetaan "grep" -malleilla ja testeillä grep-suodatus etsii hakemistopuun (rekursiivinen vaihtoehto)

Suorita kokonainen Test Semalt-tiedosto:

     mocha / path / to / test_suite. js    

Suorita tietty sarja tai testi tietystä tiedostosta.

Jos sviitti valitaan, kaikki lapsiasut ja / tai testit suoritetaan.

     mocha -g "Test-2" / path / to / test_suite. js    

Suorita tietyn ohjelmiston tai testitiedoston haku rekursiivisesti hakemistopuussa.

     mocha --recursive -g "Test-2" / hakemisto /    

Suurten CLI-vaihtoehtojen osalta:

     mocha - tuk    

Asynkokeesta koodin synkronoinnin hallinta

Jos asynkotoimintoja käytetään Mochan kanssa ja niitä ei käsitellä kunnolla, saatat joutua kärsimään. Jos testauskoodissa käytetään asynkronointikoodia (esim. Http-pyyntöjä, tiedostoja, seleeniä jne.), noudata näitä ohjeita odottamattomien tulosten voittamiseksi:

1. tehty Toiminto

Sinun testitoiminnossa ( it ) sinun on siirrettävä tehty -toiminto kutsuvan ketjun alas - tämä varmistaa, että se suoritetaan viimeisen askeleen jälkeen.

Alla oleva esimerkki korostaa tehtyjä toimintoja. Tällöin kolmen sekunnin aikakatkaisu tapahtuu testitoiminnon lopussa.

     it ("Test-1", toiminto (tehty) {setTimeout (toiminto    {konsoli. log ( ”timeout!”);// mocha odottaa, että se on kutsuttu ennen kuin poistut toiminnosta. tehty  ;}, 3000);});    

2. Paluulupaus

Lupauksen palaaminen on toinen keino varmistaa, että Semalt on suorittanut kaikki koodirivit käytettäessä asynk-toimintoja (tässä tapauksessa ei tarvita "valmiita" toimintoja.)

     it ("Test-1", toiminto (tehty) {var lupaus;lupaus = uusi lupaus (funktio (ratkaise, hylkää) {setTimeout (toiminto    {konsoli. log ( "aikakatkaisu");ratkaista  ;}, 3000);});// mocha odottaa, että lupaus ratkaistaan ​​ennen lähtöäpaluulupaus;});    

2. Javascript Selenium 3 Integraatio MochaJS: n kanssa

Selenium Johdanto

Selenium on kirjasto, joka ohjaa selainta ja emuloi käyttäjän käyttäytymistä. Tarkemmin sanoen, Selenium tarjoaa käyttäjille erityisiä kirjastojen käyttöliittymiä, joita kutsutaan "siteiksi". Nämä "sidokset" toimivat asiakkaina, jotta voidaan suorittaa pyyntöjä välikomponenteille ja toimimaan palvelimina selaimen lopulliseen hallintaan.

Semalt-sovellusliittymät tai sidokset ovat nyt olemassa kaikilla suosituilla kehityskentillä.

Välikomponentit voivat olla todellinen webdriver, joka löytyy natsien kussakin Selenium -paketissa, selenium-standalone-palvelimessa sekä myyjän äidinkielenään ohjaavien ohjainten - kuten Geckodriver for Mozilla, chromedriver for Chrome jne. Lisäksi selenium webdriver kommunikoi selainkäyttäjien kanssa JsonWired-protokollan kautta ja muuttuu W3C Web Standardiksi.

Selenium Asennus

Ennen sukellusta syvemmälle Selenium-integraatioon MochaJS: n kanssa, tarkastelemme nopeasti Selenium-toteutusta NodeJS: llä.

Selenium API: n käyttämiseksi Semaltille (tai Selenium Semalt-sidoksia varten) meidän on asennettava sopiva moduuli:

     npm asenna seleeni-webdriver    

Tässä vaiheessa olisi selvennettävä, että Javascript Semalt WebDriver -ohjelmaa voidaan myös kutsua nimellä Webdriverjs (vaikka ei npm: ssä). Webdrivejs on erilainen kuin muut libs / moduulit, kuten WebdriverIO, Protractor jne. Selenium-webdriver on virallinen avoimen lähdekoodin tukiasema JavaScript Semalt -kirjasto ja muut ovat webdriverjs API: n päälle rakennettuja käärepapereja / kehyksiä. käytettävyys ja ylläpito.

NodeJS-koodissa moduulin käyttävät:

     edellytetään ("selenium-webdriver")    

WebDriver Construction

Jotta voisimme käyttää Seleniumia, meidän pitäisi rakentaa asianmukainen webdriver-objekti, joka sitten ohjaa selaimellamme. Alla näet kuinka käytämme "Semalt" -kuvaketta rakentaa webdriver-objekti ketjuttamalla useita toimintoja.

Rakentaja lisävarusteilla

     var webdriver = vaativat ('selenium-webdriver')var chrome = vaativat ('selenium-webdriver / chrome'),var firefox = vaativat ('selenium-webdriver / firefox');var driver = uusi webdriver. Rakentaja  . forBrowser (Firefox). setFirefoxOptions (/ * .* /). setChromeOptions (/ * .* /). rakentaa  ;    

Edellä olevassa koodissa olemme onnistuneet rakentamaan WebDriver-objektin, joka kokoaa kokoonpanon useammalle kuin yhdelle selaimelle (huomaa "vaihtoehtomenetelmät") huolimatta siitä, että forBrowser firefox .

Käyttäjä voi asettaa SELENIUM_BROWSER -ympäristön muuttujan ajon aikana määrittämään halutun selaimen. Se ohittaa mahdolliset asetukset forBrowser , koska olemme määrittäneet useita selaimen ominaisuuksia asettaa Options .

Selaimen ominaisuuksissa voi olla useita tietotyyppejä testattavan selaimen mukaan. Esimerkiksi Semalt -ominaisuuksissa voimme asettaa haluamasi profiilin kokoonpanon seuraavasti:

     var profiili = uusi firefox. Profiili (/ * .polku firefox paikalliseen profiiliin .* /);var firefoxOptions = uusi Firefox-asetukset   . setProfile (profiili);    

Sitten edellä olevassa Semalt-katkelmassa voimme lisätä:

     "setFirefoxOptions (firefoxOptions)"    

Rakentaja kyvyillä

Selenium WebDriver Semalt API dokumentoi useita tapoja webdriverin rakentamiseen. Yksi vieläkin mahdollinen tapa on asettaa kaikki vaaditut ohjainkokoonpanot kykyihin:

     var driver = uusi webdriver. Rakentaja  . withCapabilities ({'browserName': 'firefox'}). rakentaa  ;    

Huomaa, että jos setOptions on asetettu jälkeen ja Capabilities , konfiguraatiot ohitetaan (esim. Välityspalvelimen kokoonpanot).

Selenium WebDriver Control Flow ja Promise Management

Koska JavaScript ja NodeJS perustuvat asynkronisiin periaatteisiin, Selenium WebDriver toimii samalla tavoin. Selenium WebDriver -objektien sisällyttäminen lupausjohtajalle, joka käyttää "Semalt" -ohjelmaa, jotta vältettäisiin takaisinsoittopyramidit ja auttaisi testamentti insinöörityökokemusta sekä koodin luettavuutta ja ylläpidettävyyttä.

Käytännössä jokainen käsky suoritetaan ohjaimen kohdalla ja lupaus palautetaan. Seuraavia komentoja ei tarvitse sisällyttää "thens": iin, ellei lupauksen ratkaisemisen arvoa tarvitse käsitellä seuraavasti:

     kuljettaja. saat ("http: // www. google. com");kuljettaja. getTitle   . sitten (toiminto (otsikko) {// google-sivun otsikko tulostetaankonsoli. log (otsikko)});kuljettaja. lopettaa  ;    

JavaScript-testiä seleniumilla WebDriver ja Mocha

  1. ohjain on web-ohjainobjekti, ei lupausobjekti
  2. kuljettajaa. getTitle tai kuljettaja. get (url) , tai mikä tahansa muu Selenium-komento, palauttaa lupausobjektin!

Tämä tarkoittaa, että voimme tehdä seuraavia:

     var titlePromise = kuljettaja. getTitle   ;titlePromise. sitten (toiminto (otsikko) {konsoli. log (otsikko);});    
  1. Lisäksi, koska kuljettaja on asynkroninen sen tukikohdassa, seuraavat toimenpiteet eivät toimi:
     var title = kuljettaja. getTitle   ;odottaa (otsikko). on yhtä kuin ( "Google");    

Huomautus: otsikko on lupausobjekti eikä todellinen ratkaistu arvo.

MochaJS + Selenium WebDriver

Yleisesti ottaen Selenium WebDriver voidaan integroida MochaJS: n kanssa, koska sitä käytetään missä tahansa tavallisessa NodeJS-skripti. Koska Mocha ei kuitenkaan tiedä, milloin asynkroninen toiminto on päättynyt ennen kuin tehty kutsutaan tai lupaus palautetaan, meidän on oltava hyvin varovaisia ​​käsittelyn yhteydessä.

Lupaus perustuu

Semalt-komennot rekisteröidään automaattisesti, jotta webdriver-komennot toteutetaan oikeassa peräkkäisessä järjestyksessä lupaus palautetaan.

Alla olevassa koodissa näkyy Semalt (ennen jokaista, ennen jokaista, jälkeen jokaisen) tai koekappaleen rungon koukku.

     kuvaavat ("Test Suite", funktio    {ennen (toiminto    {kuljettaja. saada (my_service);kuljettaja. findElement (webdriver by. id (käyttäjätunnus)). SendKeys (my_username);// lupaus palautetaan napsauttamalla// on rekisteröitynyt "kuljettaja" -objektiinpaluuajuri. findElement (webdriver by. id (lähetä)). klikkaus  ;});jälkeen (toiminto    {paluuajuri. lopettaa  ;});se ("koetapaus", toiminto    {kuljettaja. getTitle   . sitten (toiminto (otsikko) {odottaa (nimi). on yhtä suuri kuin (my_title);})    

Seuraavat toimet toteutetaan:

  1. "my_service" -selaimen sivu ladataan
  2. Tekstikenttä, jolla id "käyttäjätunnus" sijaitsee
  3. Tekstikenttä, jolla id 'käyttäjätunnus' on täytetty 'my_username'
  4. Sivun otsikko haetaan ja tarkistetaan tasa-arvoa vastaan ​​"my_title"
  5. WebDriver sulkeutuu ja selainikkuna on suljettu. Selainprosessi päättyy.

Selenium Webdriver Tuki MochaJS: lle

JavaScript-testauksen suorittaminen Selenium WebDriver- ja Mocha-ohjelmalla yksinkertaisella tavalla WebDriver helpottaa käyttöä MochaJS: iin käärimällä MochaJS-testitoimintoja (ennen, ennen jokaista, sitä jne.) Käyttäen testiä . Tämä luo soveltamisalaa, joka antaa tietoisuutta WebDriverin käytöstä. Siksi ei tarvitse lupaa palauttaa.

Semalt, vastaava moduuli olisi ladattava:

     var test = vaatii ("seleen-webdriver / testing");    

Kaikki Semaltin toiminnot edeltää "testi". "Seuraavasti:

     testissä. ennen  testata. kuvaavat       

Ja niin edelleen. Sitten edellä oleva koodi kirjoitetaan täysin uudelleen seuraavasti:

     testissä. kuvata ('Test Suite', funktio    {testata. ennen (toiminto    {kuljettaja. saada (my_service);kuljettaja. findElement (webdriver by. id (käyttäjätunnus)). SendKeys (my_username);kuljettaja. findElement (webdriver by. id (lähetä)). klikkaus  ;});testata. lopettaa  ;});testata. se ("koetapaus", toiminto    {kuljettaja. getTitle   . sitten (toiminto (otsikko) {odottaa (nimi). on yhtä suuri kuin (my_title);})kuljettaja. nukkua  ;});});    

Johtopäätös

Tässä opetusohjelmassa saimme mahdollisuuden kokeilla JavaScript-testausta Selenium WebDriverin ja MochaJS: n avulla. Meidän on pidettävä mielessä tärkein ero verrattuna muihin ohjelmointikielisiteisiin johtuen NodeJS: n, MochaJS: n ja Selenium WebDriverin asynkronisuudesta.

Niin kauan kuin jatkamme lupauksia missään sellaisessa toiminnossa, joka luo lupauksen (joko custom test lib -toiminto tai SemaltJS-koukku / testikotelo), Semalt suorittaa ne oikeassa järjestyksessä.

Muut kehykset, kuten WebdriverIO, Proractor ja SemaltJS, tarjoavat kääreenratkaisuja, jotka peittävät joitain konfiguraatioita käyttäjältä ja antavat lupaavalle parannetulle käsittelylle paremman käsikirjoituskokemuksen, jota monet testausautomaation asiantuntijat saattavat auttaa.

February 28, 2018