Formulär är de grundläggande webbelementen för att få information från webbplatsens besökare. Webblanketter har olika GUI-element som textrutor, lösenordsfält, kryssrutor, radioknappar, rullgardinsmenyer, filingångar etc.
Vi kommer att se hur du kommer åt dessa olika formelement med hjälp av Selenium Web Driver med Java. Selen inkapslar varje formelement som ett objekt för WebElement. Det ger API för att hitta elementen och vidta åtgärder på dem som att skriva in text i textrutor, klicka på knapparna etc. Vi ser de metoder som är tillgängliga för att komma åt varje formulärelement.
I denna handledning kommer vi att se hur man identifierar följande formelement
- Introduktion till WebElement, findElement (), findElements ()
- Inmatningslåda
- Ange värden i inmatningsrutorna
- Ta bort värden i inmatningsrutorna
- Knappar
- Skicka knappar
- Komplett kod
- Felsökning
Introduktion till WebElement, findElement (), findElements ()
Selenium Web Driver inkapslar ett enkelt formulärelement som ett objekt för WebElement.
Det finns olika tekniker genom vilka WebDriver identifierar formelementen baserat på de olika egenskaperna hos webbelementen som ID, Namn, Klass, XPath, Tagname, CSS-väljare, länktext etc.
Web Driver tillhandahåller följande två WebElement-metoder för att hitta elementen.
- findElement () - hittar ett enda webbelement och returneras som ett WebElement Selen-objekt.
- findElements () - returnerar en lista med WebElement-objekt som matchar sökarkriterierna.
Låt oss se kodavsnitten för att få ett enda element - Textfält på en webbsida som ett objekt för WebElement med findElement () -metoden. Vi ska täcka metoden findElements () för att hitta flera element i efterföljande självstudier.
Steg 1: Vi måste importera detta paket för att skapa objekt av webbelement
Steg 2: Vi måste ringa metoden findElement () som är tillgänglig i klassen WebDriver och få ett objekt från WebElement.
Se nedan för att se hur det görs.
Inmatningslåda
Inmatningsrutor hänvisar till någon av dessa två typer:
- Textfält - Seleninmatade textrutor som accepterar inskrivna värden och visar dem som de är.
- Lösenordsfält - textrutor som accepterar inskrivna värden men maskerar dem som en serie specialtecken (vanligtvis prickar och asterisker) för att undvika att känsliga värden visas.
Sökare
Metoden findElement () tar en parameter som är en lokaliserare till elementet. Olika lokatorer som By.id (), By.name (), By.xpath (), By.CSSSelector () etc. lokaliserar elementen på sidan med hjälp av deras egenskaper som '' '', id, namn eller sökväg, etc.
Du kan använda plugins som Fire path för att få hjälp med att få id, xpath, etc. för elementen.
Med hjälp av exempelwebbplatsen http://demo.guru99.com/test/login.html som anges nedan är koden för att lokalisera textfältet "E-postadress" med id-lokaliseraren och "Lösenord" -fältet med namngivaren.
- E-posttextfältet finns med Id
- Lösenordsfältet finns med namn
sendkeys i Selen
sendkeys () i Selenium är en metod som används för att ange redigerbart innehåll i text- och lösenordsfälten under testkörningen. Dessa fält identifieras med hjälp av sökare som namn, klass, id, etc. Det är en metod som finns på webbelementet. Till skillnad från typmetoden ersätter metoden sendkeys () inte befintlig text i någon textruta.
Ange värden i inmatningsrutorna
För att skriva in text i textfält och lösenordsfält är sendKeys () metoden tillgänglig på WebElement i Selen.
Med samma exempel på http://demo.guru99.com/test/login.html webbplats, här är hur vi hittar fältet Text och lösenord och skriver in text i Selen.
- Hitta textfältet "E-postadress" med id-sökaren.
- Hitta fältet "Lösenord" med hjälp av namnsökaren
- Ange text i "E-postadress" med Selen-sändnyckelmetoden.
- Ange ett lösenord i fältet "Lösenord" med metoden sendKeys ().
Ta bort värden i inmatningsrutorna
Den clear () metoden används för att ta bort texten i en inmatningsruta. Den här metoden behöver ingen parameter . Kodavsnittet nedan rensar texten från fältet E-post eller Lösenord
Knappar
Klicka på Selenium-knappen genom att klicka () -metoden.
I exemplet ovan
- Hitta knappen för att logga in
- Klicka på knappen "Logga in" på webbplatsens inloggningssida för att logga in på webbplatsen.
Skicka knappar
Skicka-knapparna används för att skicka hela formuläret till servern. Vi kan antingen använda klickmetoden () på webbelementet som en vanlig knapp som vi har gjort ovan eller använda metoden submit () på vilket webbelement som helst i formuläret eller på själva skicka knappen.
När submit () används kommer WebDriver att slå upp DOM för att veta vilken form elementet tillhör och sedan utlösa dess inlämningsfunktion.
Komplett kod
Här är den fullständiga arbetskoden
importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.chrome.ChromeDriver;importera org.openqa.selenium. *;offentlig klassformulär {public static void main (String [] args) {// deklaration och instantiering av objekt / variablerSystem.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");WebDriver-drivrutin = ny ChromeDriver ();SträngbasUrl = "http://demo.guru99.com/test/login.html";driver.get (baseUrl);// Hämta WebElement som motsvarar e-postadressen (TextField)WebElement-e-post = driver.findElement (By.id ("e-post"));// Hämta WebElement som motsvarar lösenordsfältetWebElement-lösenord = driver.findElement (By.name ("passwd"));email.sendKeys ("Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det.");password.sendKeys ("abcdefghlkjl");System.out.println ("Textfältuppsättning");// Ta bort värden i textrutanemail.clear ();password.clear ();System.out.println ("Textfält rensat");// Hitta knappen SkickaWebElement-inloggning = driver.findElement (By.id ("SubmitLogin"));// Använda klickmetoden för att skicka formuläremail.sendKeys ("Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det."); password.sendKeys ("abcdefghlkjl"); login.click (); System.out.println ("Inloggning klar med klick"); // använder inlämningsmetoden för att skicka in formuläret. Skicka används på lösenordsfältet driver.get (baseUrl); driver.findElement (By.id ("e-post")). sendKeys ("Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att kunna se det."); driver.findElement (By.name ("passwd")). sendKeys ("abcdefghlkjl"); driver.findElement (By.id ("SubmitLogin")). submit (); System.out.println ("Inloggning klar med Skicka"); //driver.close (); }}
Felsökning
Om du stöter på NoSuchElementException () när du hittar element betyder det att elementet inte finns på sidan vid den punkt där webbdrivrutinen öppnade sidan.
- Kontrollera din sökare igen med Firepath eller Inspect Element i Chrome.
- Kontrollera om värdet du använde i koden skiljer sig från värdet för elementet i Firepath nu.
- Vissa egenskaper är dynamiska för få element. Om du tycker att värdet är annorlunda och förändras dynamiskt, överväg att använda By.xpath () eller By.cssSelector () som är mer pålitliga men komplexa sätt.
- Ibland kan det också vara ett vänteproblem, dvs. webbdrivrutinen körde din kod redan innan sidan laddades helt, etc.
- Lägg till en väntan före findElement () med implicit eller uttrycklig väntan.
Sammanfattning
- Tabellen nedan sammanfattar kommandona för åtkomst till varje typ av element som diskuterats ovan
Element | Kommando | Beskrivning |
---|---|---|
Inmatningslåda | sendKeys () | används för att ange värden i textrutor |
klar() | används för att rensa textrutor för dess nuvarande värde | |
Länkar | klick() | används för att klicka på länken och vänta på att sidan laddas till innan du fortsätter till nästa kommando. |
Skickaknapp | Skicka in() |
- WebDriver tillåter val av mer än ett alternativ i ett flera SELECT-element.
- Du kan använda metoden () för valfritt element i formuläret. WebDriver aktiverar automatiskt inlämningsfunktionen för det formulär där elementet tillhör.