Kuinka käsitellä evästeitä Selenium web-ajuri
⚡ Älykäs yhteenveto
Evästeet tallentavat käyttäjän asetukset ja istuntotunnisteet avain-arvo-pareina, ja Selenium WebDriver voi lukea, tallentaa ja toistaa ne, joten automaattinen testi ohittaa kirjautumisnäytön jokaisella seuraavalla ajokerralla.
HTTP-eväste sisältää tietoja käyttäjästä ja hänen mieltymyksistään. Se tallentaa tietoja avain-arvo-parin avulla. Se on pieni tietomäärä, jonka verkkosovellus lähettää ja tallentaa verkkoselaimeen käyttäjän selatessa kyseistä verkkosivustoa.
Jos olet uusi aiheen parissa, aloita tästä oppaasta evästeiden testaus.
Selenium Kysely komennot evästeille
In Selenium WebDriverissa voimme tehdä kyselyitä ja olla vuorovaikutuksessa evästeiden kanssa käyttämällä alla olevia sisäänrakennettuja metodeja. Jokainen niistä saavutetaan driver.manage()-metodin kautta, joka palauttaa Options-rajapinnan.
| Selenium Kyselykomennot | ulostulo |
|---|---|
| ajuri.hallitse().getEvästeet(); | Palauttaa kaikkien evästeiden luettelon |
| ajuri.hallitse().getCookieNamed(arg0); | Palauttaa tietyn evästeen nimen perusteella |
| ajuri.hallitse().lisääEväste(arg0); | Luo ja lisää evästeen |
| ajuri.hallitse().deleteCookie(arg0); | Poistaa tietyn evästeen |
| driver.manage().deleteCookieNamed(arg0); | Poistaa tietyn evästeen nimen perusteella |
| driver.manage().deleteAllCookies(); | Poistaa kaikki evästeet |
Miksi käsitellä (hyväksyä) evästeitä Selenium?
Jokainen eväste liittyy nimeen, arvoon, verkkotunnukseen, polkuun, vanhenemiseen ja sen tilaan, onko se suojattu vai ei. Asiakkaan validoimiseksi palvelin jäsentää kaikki nämä arvot evästeessä.
Kun testaus verkkosovellus, joka käyttää Selenium WebDriver-selaimessasi sinun on ehkä luotava, päivitettävä tai poistettava eväste.
Esimerkiksi verkkokauppaa automatisoitaessaping sovelluksessa sinun on ehkä automatisoitava testiskenaarioita, kuten tilauksen tekeminen, ostoskorin tarkastelu, maksutiedot, tilauksen vahvistus ja niin edelleen.
Jos evästeitä ei tallenneta, sinun on kirjauduttava sisään joka kerta ennen yllä lueteltujen testiskenaarioiden suorittamista. Tämä lisää koodaustyötäsi ja suoritusaikaasi.
Ratkaisu on tallentaa evästeet tiedostoon. Later, nouta evästeen arvot tästä tiedostosta ja lisää ne nykyiseen selainistuntoosi. Tämän seurauksena voit ohittaa kirjautumisvaiheet jokaisessa testitapaus koska kuljettajaistunnossasi on nämä tiedot.
Sovelluspalvelin käsittelee nyt selainistuntoasi todennetuksi ja ohjaa sinut suoraan pyydettyyn sivustoosi. URL.
Kuinka käsitellä evästeitä Selenium
Käytämme https://demo.guru99.com/test/cookie/selenium_aut.php demo tarkoitukseemme.
Tämä on 2-vaiheinen prosessi.
Vaihe 1) Kirjaudu sovellukseen ja tallenna luotu todennuseväste.
Demosovellus näyttää alla olevan yksinkertaisen kirjautumislomakkeen.
Vaihe 2) Kirjaudu sovellukseen uudelleen tallennetun evästeen avulla ilman käyttäjätunnusta ja salasanaa.
Vaihe 1) Evästetietojen tallentaminen
package CookieExample; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.Cookie; public class cookieRead{ public static void main(String[] args) { WebDriver driver; System.setProperty("webdriver.chrome.driver","G:///chromedriver.exe"); driver=new ChromeDriver(); driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php"); // Input Email id and Password If you are already Register driver.findElement(By.name("username")).sendKeys("abc123"); driver.findElement(By.name("password")).sendKeys("123xyz"); driver.findElement(By.name("submit")).click(); // create file named Cookies to store Login Information File file = new File("Cookies.data"); try { // Delete old file if exists file.delete(); file.createNewFile(); FileWriter fileWrite = new FileWriter(file); BufferedWriter Bwrite = new BufferedWriter(fileWrite); // loop for getting the cookie information // loop for getting the cookie information for(Cookie ck : driver.manage().getCookies()) { Bwrite.write((ck.getName()+";"+ck.getValue()+";"+ck.getDomain()+";"+ck.getPath()+";"+ck.getExpiry()+";"+ck.isSecure())); Bwrite.newLine(); } Bwrite.close(); fileWrite.close(); } catch(Exception ex) { ex.printStackTrace(); } } }
⚠️ Versiohuomautus: System.setProperty-rivi säilytetään täsmälleen sellaisena kuin se alkuperäisessä tutoriaalissa kirjoitettiin. Selenium 4.6 eteenpäin, Selenium Manager lataa ja konfiguroi vastaavan chromedriver-ajurin automaattisesti, joten kyseistä riviä ei enää tarvita nykyisessä asennuksessa. Alkuperäinen koodi jätetään koskemattomaksi alla ja se käännetään silti.
Code Selitys
- Luo WebDriver-instanssi.
- Käy verkkosivustolla käyttämällä driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
- Kirjaudu sisään sovellukseen.
- Lue evästetiedot käyttämällä
driver.manage().getCookies();
- Tallenna evästetiedot tiedoston avullaWriter luokka kirjoittaa merkkijonoja ja BufferedWriter kirjoittaaksesi tekstin tiedostoon nimeltä Cookies.data.
- Cookies.data-tiedosto tallentaa kaikki evästetiedot sekä nimen, arvon, verkkotunnuksen ja polun. Voimme hakea nämä tiedot ja kirjautua sovellukseen antamatta kirjautumistietoja.
Kun olet suorittanut yllä olevan koodin, Cookies.data-tiedosto luodaan projektin kansiorakenteeseen. Avaa tiedosto ja näet AUT:n kirjautumistiedot evästemuodossa, kuten alla olevassa korostetussa näytössä näkyy.
Vaihe 2) Tallennetun evästeen käyttö sovellukseen kirjautumiseen
Nyt käytämme vaiheessa 1 luotua evästettä ja käytämme sitä istuntomme todentamiseen sovelluksessa.
package CookieExample; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Date; import java.util.StringTokenizer; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class CookieWrite { public static void main(String[] args){ WebDriver driver; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); driver=new ChromeDriver(); try{ File file = new File("Cookies.data"); FileReader fileReader = new FileReader(file); BufferedReader Buffreader = new BufferedReader(fileReader); String strline; while((strline=Buffreader.readLine())!=null){ StringTokenizer token = new StringTokenizer(strline,";"); while(token.hasMoreTokens()){ String name = token.nextToken(); String value = token.nextToken(); String domain = token.nextToken(); String path = token.nextToken(); Date expiry = null; String val; if(!(val=token.nextToken()).equals("null")) { expiry = new Date(val); } Boolean isSecure = new Boolean(token.nextToken()). booleanValue(); Cookie ck = new Cookie(name,value,domain,path,expiry,isSecure); System.out.println(ck); driver.manage().addCookie(ck); // This will add the stored cookie to your current session } } }catch(Exception ex){ ex.printStackTrace(); } driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php"); } }
Tuloste: Sinut ohjataan suoraan kirjautumisen onnistumisnäyttöön ilman käyttäjätunnuksen ja salasanan syöttämistä.
HUOMAUTUS: Käytä kovaa päivitystä, jos näet kirjautumissivun yllä olevan komentosarjan suorittamisen jälkeen.
⚠️ Java toteaa: Lukijan skripti käyttää funktioita new Boolean(String) ja new Date(String), jotka molemmat on JDK:ssa vanhentunut jo kauan sitten. Nykyaikaisessa JDK:ssa vastineet ovat Boolean.parseBoolean(token.nextToken()) ja java.time-jäsennin. Alkuperäiset rivit on säilytetty yllä; käsittele huomautusta nykyaikaisena korvauksena äläkä muokkauksena.
Evästeiden ominaisuudet ja Selenium Evästeluokka
Yllä olevat kaksi skriptiä siirtävät kuusi kenttää tiedostoon ja tiedostosta ulos. org.openqa.selenium.Cookie-luokka paljastaa juuri nämä kentät, ja niiden tunteminen tekee vaiheessa 2 olevasta tokenizer-silmukasta paljon helpomman lukea.
| Ominaisuus | Accessor | Mitä se tarkoittaa |
|---|---|---|
| Nimi | getName () | Palvelimen hakema avain, esimerkiksi JSESSIONID. |
| Arvo | getValue () | Tallennetut tiedot, yleensä istunnon tunniste. |
| Domain | getDomain() | Isäntä, jolle selain lähettää evästeen takaisin. |
| Polun, | getPath() | URL etuliite, johon eväste liittyy. |
| päättymistä | getExpiry() | Evästeen kuolemanpäivämäärä. Null-arvo tarkoittaa istuntokohtaista evästettä. |
| Varmista | onTurvallinen() | Tosi, kun eväste lähetetään vain HTTPS:n kautta. |
| HttpOnly | isHttpOnly() | Totta, kun JavaSivulla oleva skripti ei voi lukea evästettä. |
| Samasivusto | getSamaSivusto() | Tiukka, Löyhä tai Ei mitään. Lisätty Selenium 4. |
Vaiheessa 2 käytetyn kuusiargumenttisen konstruktorin sijaan nykyinen koodi yleensä rakentaa evästeen sisäisen Builder-luokan kautta, jonka avulla voit asettaa vain ne kentät, joista välität.
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4") .domain("demo.guru99.com") .path("/") .isSecure(true) .isHttpOnly(true) .build(); driver.manage().addCookie(sessionCookie);
Yksi sääntö yllättää useimmat: evästeobjektia ei voi muokata sen luomisen jälkeen. Arvon muuttamiseksi poista vanha eväste ja lisää uudelleenrakennettu kopio, minkä vuoksi Builder on niin hyödyllinen.
Cookie original = driver.manage().getCookieNamed("JSESSIONID"); driver.manage().deleteCookie(original); Cookie updated = new Cookie.Builder(original.getName(), "NEW-VALUE") .domain(original.getDomain()) .path(original.getPath()) .isSecure(original.isSecure()) .build(); driver.manage().addCookie(updated);
Yleisiä evästevirheitä Selenium WebDriver ja niiden korjaaminen
Evästekoodi epäonnistuu usein muutamalla ennustettavalla tavalla. Alla olevassa taulukossa luetellaan useimmin raportoidut ongelmat sekä niiden syy ja korjauskeino.
| Oire | Aiheuttaa | Korjata |
|---|---|---|
| Virheellinen evästeverkkotunnuksen poikkeus | addCookie-funktiota kutsuttiin ennen sivustolle siirtymistä, joten selain on edelleen about:blank-tilassa. | Kutsu ensin driver.get-funktiota kohdeverkkotunnukseen ja lisää sitten eväste. |
| UnableToSetCookieException | Evästeverkkotunnus ei vastaa parhaillaan ladattua sivua. | Poista verkkotunnuskenttä tai aseta se avoimen sivun tarkkaan isäntään. |
| Kirjautumissivu näkyy edelleen evästeen lisäämisen jälkeen | Sivu renderöitiin ennen evästeen olemassaoloa. | Kutsu driver.navigate().refresh(), mikä on yllä olevan HUOMAUTUKSEN mukainen kova päivitys. |
| getCookieNamed palauttaa null-arvon | Nimi on kirjoitettu väärin, tai eväste kuuluu eri polkuun tai aliverkkotunnukseen. | Dumpaa jokainen eväste getCookies-funktiolla ja vertaa nimiä. |
| Tallennettu eväste hylätään myöhemmällä suorituskerralla | Vanhenemisaika on umpeutunut tai palvelin on lopettanut istunnon. | Luo Cookies.data uudelleen suorittamalla vaihe 1 uudelleen. |
Jos selain avautuu ja todennetaan oikein, mutta komentosarja epäonnistuu sen jälkeen, eväste ei todennäköisesti ole syyllinen. poikkeusten käsittely Selenium on nopein reitti tuosta pisteestä, ja erillinen Firefox profiili on tavallinen vaihtoehto, kun haluat istuntodatan säilyvän ilman tiedostoa.


