Kuidas küpsiseid sees käsitleda Selenium Veebidraiver
⚡ Nutikas kokkuvõte
Küpsised salvestavad kasutaja eelistusi ja seansi identifikaatoreid võtme-väärtuse paaridena ja Selenium WebDriver saab neid lugeda, salvestada ja taasesitada, nii et automatiseeritud test jätab sisselogimisekraani iga järgneva käivitamise korral vahele.
HTTP-küpsis sisaldab teavet kasutaja ja tema eelistuste kohta. See salvestab teavet võtme-väärtuse paari abil. See on väike andmekogum, mille veebirakendus saadab ja salvestab veebibrauserisse ajal, mil kasutaja seda veebisaiti sirvib.
Kui teema on teie jaoks uus, alustage selle juhendiga küpsiste testimine.
Selenium Küpsiste käsud
In Selenium WebDriveris saame küpsistega päringuid esitada ja nendega suhelda allpool toodud sisseehitatud meetodite abil. Igaüheni neist jõutakse driver.manage() kaudu, mis tagastab valikute liidese.
| Selenium Päringu käsud | Väljund |
|---|---|
| draiver.halda().getKüpsised(); | Tagastab kõigi küpsiste loendi |
| driver.manage().getCookieNamed(arg0); | Tagastab konkreetse küpsise vastavalt nimele |
| draiver.halda().addCookie(arg0); | Loob ja lisab küpsise |
| draiver.halda().deleteCookie(arg0); | Kustutab konkreetse küpsise |
| driver.manage().deleteCookieNamed(arg0); | Kustutab konkreetse küpsise nime järgi |
| driver.manage().deleteAllCookies(); | Kustutab kõik küpsised |
Miks küpsiseid tuleb käsitleda (aktsepteerida) Selenium?
Iga küpsis on seotud nime, väärtuse, domeeni, tee, aegumise ja olekuga, kas see on turvaline või mitte. Kliendi kinnitamiseks parsib server kõik need väärtused küpsises.
Kui testimine veebirakendus, mis kasutab Selenium WebDriveri kasutamiseks peate võib-olla küpsise looma, värskendama või kustutama.
Näiteks veebipoe automatiseerimiselping rakenduse puhul peate võib-olla automatiseerima testimisstsenaariume, nagu tellimuse esitamine, ostukorvi vaatamine, makseteabe esitamine, tellimuse kinnitamine jne.
Kui küpsiseid ei salvestata, peate enne ülaltoodud testistsenaariumide käivitamist iga kord sisselogimistoimingu tegema. See suurendab teie kodeerimistööd ja täitmisaega.
Lahendus on küpsiste salvestamine faili. Later, hankige sellest failist küpsise väärtused ja lisage need oma praegusesse brauseriseanssi. Selle tulemusel saate iga sisselogimisetapi vahele jätta. testjuhtum sest teie juhiseansis on see teave sees.
Rakendusserver käsitleb nüüd teie brauseriseanssi autentituna ja suunab teid otse teie soovitud lehele. URL.
Kuidas küpsiseid sees käsitleda Selenium
Me kasutame https://demo.guru99.com/test/cookie/selenium_aut.php meie demo eesmärgil.
See on 2-etapiline protsess.
1. samm) Logige rakendusse sisse ja salvestage loodud autentimisküpsis.
Demorakendus kuvab allpool näidatud lihtsa sisselogimisvormi.
2. samm) Kasutage salvestatud küpsist, et rakendusse uuesti sisse logida ilma kasutajanime ja parooli kasutamata.
Samm 1) Küpsiste teabe salvestamine
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(); } } }
⚠️ Versiooni märkus: System.setProperty rida jäetakse täpselt selliseks, nagu algses õpetuses see kirjutati. Alates Selenium 4.6 ja edasi Selenium Haldur laadib vastava chromedriveri automaatselt alla ja konfigureerib selle, seega pole see rida praeguses seadistuses enam vajalik. Algset koodi jäetakse allpool puutumata ja see kompileerub ikkagi.
Code Selgitus
- Loo WebDriveri eksemplar.
- Külasta veebilehte käsuga driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
- Logi rakendusse sisse.
- Lugege küpsiste teavet kasutades
driver.manage().getCookies();
- Salvesta küpsiste teave faili abilWriter klass märkide voogude kirjutamiseks ja BufferedWriter teksti kirjutamiseks faili nimega Cookies.data.
- Fail Cookies.data salvestab kogu küpsiste teabe koos nime, väärtuse, domeeni ja teega. Saame selle teabe kätte ja rakendusse sisse logida ilma sisselogimisandmeid sisestamata.
Kui olete ülaltoodud koodi käivitanud, luuakse projekti kaustastruktuuri fail Cookies.data. Avage fail ja näete AUT-i sisselogimisandmeid küpsise vormingus, nagu on näidatud alloleval esiletõstetud ekraanipildil.
2. samm) Salvestatud küpsise kasutamine rakendusse sisselogimiseks
Nüüd pääseme juurde 1. etapis loodud küpsisele ja kasutame seda rakenduses oma seansi autentimiseks.
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"); } }
Väljund: Teid suunatakse otse sisselogimise õnnestumise ekraanile ilma sisestatud kasutajanime ja parooli sisestamata.
MÄRKUS. Kui pärast ülaltoodud skripti käivitamist kuvatakse sisselogimisleht, kasutage kõva värskendust.
⚠️ Java märkused: Lugemisskript kasutab funktsioone new Boolean(String) ja new Date(String), mille JDK on juba ammu aegunud. Tänapäevases JDK-s on vasteteks Boolean.parseBoolean(token.nextToken()) ja java.time parser. Algsed read on ülalpool säilitatud; käsitle märkust pigem moodsa asendusena kui muudatusena.
Küpsiste atribuudid ja Selenium Küpsiseklass
Kaks ülaltoodud skripti liigutavad faili sisse ja välja kuus välja. Need väljad on täpselt need, mida org.openqa.selenium.Cookie klass avaldab, ja nende tundmine muudab 2. sammu tokenizer-tsükli palju lihtsamini loetavaks.
| Atribuut | Juurdepääsusüsteem | Mida see tähendab |
|---|---|---|
| Eesnimi | getName () | Võti, mida server otsib, näiteks JSESSIONID. |
| Väärtus | getValue () | Salvestatud andmed, tavaliselt seansi identifikaator. |
| Domeen | getDomain() | Host, kuhu brauser küpsise tagasi saadab. |
| Tee | getPath() | . URL eesliide, millele küpsis kehtib. |
| Aegumine | getExpiry() | Küpsise suremise kuupäev. Nullväärtus tähendab seansiküpsist. |
| Kindlustage | onTurvaline() | Tõsi, kui küpsist saadetakse ainult HTTPS-i kaudu. |
| Ainult HTTP-protokoll | isHttpOnly() | Tõsi, kui JavaLehel olev skript ei saa küpsist lugeda. |
| Sama sait | getSameSite() | Range, Lõtv või Puudub. Lisatud Selenium 4. |
2. etapis kasutatud kuueargumendilise konstruktori asemel loob praegune kood tavaliselt küpsise sisemise Builder-klassi kaudu, mis võimaldab teil määrata ainult need väljad, mis teile olulised on.
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4") .domain("demo.guru99.com") .path("/") .isSecure(true) .isHttpOnly(true) .build(); driver.manage().addCookie(sessionCookie);
Üks reegel jääb enamikule inimestele silma: küpsiseobjekti ei saa pärast loomist muuta. Väärtuse muutmiseks kustutate vana küpsise ja lisate taastatud koopia, mistõttu on Builder nii kasulik.
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);
Levinud küpsiste vead saidil Selenium WebDriver ja kuidas neid parandada
Küpsisekood kipub ebaõnnestuma mitmel etteaimataval viisil. Allolev tabel loetleb kõige sagedamini teatatud vead koos põhjuse ja lahendusega.
| Sümptom | Põhjus | Määrama |
|---|---|---|
| Kehtetu küpsise domeeni erand | Funktsioon addCookie kutsuti välja enne saidile navigeerimist, seega on brauser endiselt about:blank peal. | Kutsu esmalt sihtdomeenil käsk driver.get ja seejärel lisa küpsis. |
| UnableToSetCookieException | Küpsise domeen ei vasta praegu laetud lehele. | Eemalda domeeniväli või määra see avatud lehe täpseks hostiks. |
| Sisselogimisleht kuvatakse ikka ka pärast küpsise lisamist | Leht renderdati enne küpsise olemasolu. | Kutsu välja driver.navigate().refresh(), mis ongi ülaltoodud MÄRKUSes kõva värskenduse all mõeldud. |
| getCookieNamed tagastab nullväärtuse | Nimi on valesti kirjutatud või kuulub küpsis teisele teele või alamdomeenile. | Käivita iga küpsise dump käsuga getCookies ja võrdle nimesid. |
| Salvestatud küpsis lükatakse hilisemal käivitamisel tagasi | Aegumistähtaeg on möödas või server lõpetas seansi. | Küpsiste.andmete taastamiseks käivita 1. samm uuesti. |
Kui brauser avaneb ja autentib õigesti, kuid skript ebaõnnestub pärast seda, pole küpsis tõenäoliselt süüdi. erandite käsitlemine Selenium on sellest punktist kiirem marsruut ja spetsiaalne Firefox profiil on tavaline alternatiiv, kui soovite, et seansiandmed säiliksid ilma failita.


