handling iframes using selenium webdriver switchto method
vrste bugova u testiranju softvera
Rukovanje iFramovima pomoću Selenium WebDriver: Praktični vodič s praktičnim primjerima
iFrame (umetnuti okvir) je HTML dokument ugrađen u drugi HTML dokument.
iFrames se najčešće koriste za prikazivanje oglasa na web stranici. iFrames se izričito spominju u HTML dokumentu pomoću HTML oznake
Ovaj će vam vodič objasniti sve o rukovanju ifram-ovima u selenu, zajedno s odgovarajućim primjerima koda za vaše lako razumijevanje.
=> Pročitajte seriju Easy Training za selen.
Što ćete naučiti:
- Rukovanje iFramovima pomoću selena
- AŽURIRANJE ožujka 2020
- Zaključak
Rukovanje iFramovima pomoću selena
Uokvireni okvir unutar web stranice može se identificirati u pregledniku Firefox ako je opcija nazvana 'Ovaj okvir' prikazana na opcijama desnog klika kao što je prikazano u nastavku.
Alternativno, možemo provjeriti ima li web stranica bilo koji iframes gledajući izvorni kod i tražeći oznaku
List iframes = driver.findElements(By.tagName(“iframe”));
Metode koje pruža selen za rukovanje iFrames-om
Selen nudi sljedeće ugrađene metode za prebacivanje naprijed-natrag s iframeova.
- switchTo.frame (int frameNumber)
- switchTo.frame (string frameName)
- switchTo.frame (WebElement frameElement)
- switchTo (). defaultContent ()
# 1) switchTo.frame (int frameNumber)
- Ova metoda omogućuje korisnicima da se prebace na određeni okvir pomoću ID-a okvira.
- Broj okvira je vrijednost indeksa koja se temelji na nuli, što znači da prvi okvir web stranice ima indeks 0, drugi okvir ima indeks 1, a treći okvir ima indeks 3 i tako dalje.
- Broj okvira također se može identificirati pomoću okvira ID elementa. To može učiniti Desni klik -> Pregledaj element i potražite iFrame. Provjerite ima li bilo koji od iFrameova atribut ID.
Uzorak iframe elementa na izvornom kodu izgledat će kako je spomenuto u nastavku.
Jednom kada je identificiran id iFrame-a, isti možemo koristiti za prebacivanje na okvir kao u nastavku.
Primjeri:
driver.switchTo.frame (“a077aa5e”);
driver.switchTo.frame (0);
- Ova metoda baca NoSuchFrameException kada traženi okvir nije pronađen na trenutnoj web stranici.
# 2) switchTo.frame (string frameName)
- Ova metoda omogućuje korisnicima da se prebace na određeni okvir pomoću naziva okvira definiranog od strane programera.
- Ime okvira potrebno je zatvoriti unutar dvostrukih navodnika da bi se smatralo parametrom String.
- Ova metoda baca NoSuchFrameException kada traženi okvir nije pronađen na trenutnoj web stranici.
Primjer:
U gore spomenutom kodu, ID okvira i naziv okvira imaju istu vrijednost. Prebacivanje na okvir može se izvršiti pomoću naziva okvira kako je dolje prikazano:
driver.switchTo.frame (“a077aa5e”);
# 3) switchTo.frame (WebElement frameElement)
- Ova metoda omogućuje korisnicima prelazak na okvir na temelju lokacije Web elementa.
- Ova metoda baca NoSuchFrameException kada traženi okvir nije prisutan na web stranici i StaleElementReferenceException ako okvir prikazan na web stranici nije aktivan.
Primjer:
WebElement frameElement = driver.findElement (By.id (“a077aa5e”));
driver.switchTo.frame (frameElement);
# 4) switchTo (). DefaultContent ()
- Prebacivanje između iframeova i nadređene stranice može se postići metodom driver.switchTo (). DefaultContent ().
- Napominjemo da u Selenu postoji slična metoda za prebacivanje između okvira s imenom driver.switchTo (). ParentFrame ().
- Razlika između driver.switchTo (). DefaultContent () i driver.switchTo (). ParentFrame () je u tome što prva metoda prebacuje kontrolu na glavnu web stranicu bez obzira na broj okvira unutar web stranice, dok druga metoda prebacuje kontrolu na nadređeni okvir trenutnog okvira.
Primjer:
Pretpostavimo da unutar roditeljske web stranice p1 postoje tri okvira nazvana i1, i2 i i3. Okviri i1, i2 i i3 međusobno ovise što znači da će jedan okvir biti nadređeni drugom.
Koristeći driver.switchTo (). DefaultContent () metodu na okviru i3, kontrola web upravljačkog programa premješta se na nadređenu stranicu, str. Dok metoda driver.switchTo (). ParentFrame () na okviru i3 prebacuje kontrolu natrag na okvir i2 i tako dalje.
Uzorak izvornog koda:
Ispod je scenarij ispitivanja koji će se automatizirati pomoću iframeova u selenu:
- Otvorite web mjesto SoftwareTestingHelp.com.
- Pronađite sve HTML elemente s oznakom iframe, prebrojte broj pojavljivanja iFrame-a i ispišite ga na konzoli.
- Prebacite se na važeći okvir na web stranici pomoću ID-a okvira i ispišite izvorni kod okvira.
- Zatvorite trenutni prozor preglednika.
package Demo; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class iFramesDemo { public static void main(String() args) throws InterruptedException { System.setProperty('webdriver.gecko.driver','D:\Data_Personal\Demo \geckodriver-v0.23.0-win64\geckodriver.exe'); WebDriver driver = new FirefoxDriver(); driver.get('https://www.softwaretestinghelp.com/'); //Finding all iframe tags on a web page List elements = driver.findElements(By.tagName('iframe')); int numberOfTags = elements.size(); System.out.println('No. of Iframes on this Web Page are: ' +numberOfTags); // Switch to the frame using the frame id System.out.println('Switching to the frame'); driver.switchTo().frame('aswift_0'); // Print the frame source code System.out.println('Frame Source' +driver.getPageSource()); // Switch back to main web page driver.switchTo().defaultContent(); driver.quit(); } }
Izlaz koda:
Otvorite web mjesto: https://www.softwaretestinghelp.com
Prebacite se na okvir nazvan aswift_0.
Ispišite broj iframeova na web stranici na prozoru konzole eclipse.
Ispišite izvorni kod okvira na konzolu eclipse nakon prelaska na okvir.
Objašnjenje koda:
- Inicijaliziramo objekt upravljačkog programa gecko pomoću metode System.setProperty kako bi ukazali na put datoteke geckodriver.exe na lokalnom stroju.
- Zatim instanciramo objekt upravljačkog programa FireFox putem sučelja WebDriver.
- Pomoću objekta upravljačkog programa za Firefox otvara se sljedeća web stranica: https://www.softwaretestinghelp.com.
- U sljedećem koraku identificiramo broj iframe elemenata prikazanih na web stranici, prebrojavamo ih i prikazujemo iframe brojeve na konzoli eclipse.
- Koristeći ID okvira, prelazimo na okvir na web stranici. U gornjem slučaju, ID okvira je 'aswift_0'.
- Nakon što smo uspješno prešli na okvir, ispisujemo izvorni kod okvira na konzoli eclipse.
- Zatim se vraćamo na nadređenu web stranicu pomoću naredbe driver.switchTo (). DefaultContent () i konačno zatvaramo instancu web upravljačkog programa pomoću metode driver.quit.
Razlika između okvira i iFramea u selenu
- Okvir se koristi za dijeljenje stranice na više odjeljaka, s novim sadržajem u svakom odjeljku.
- IFrame se koristi za ugrađivanje sadržaja vanjskih web stranica u web stranicu kako bi se izbjegli problemi skriptiranja na više web lokacija.
- Smatra se da je iFrame manje siguran od okvira, jer iFrame omogućuje programerima ugrađivanje sadržaja s web lokacija trećih strana. Dakle, iframe zahtijeva od programera da vjeruje sadržaju koji je ugradio u iframe.
- Većina web aplikacija koje se danas razvijaju ne koriste okvire za dijeljenje stranice, već koriste iframere za ugrađivanje vanjskog sadržaja, poput oglasa u web stranicu.
Rukovanje dinamičkim okvirima u selenu
- Na nekim web stranicama svojstva okvira, poput ID-a okvira i imena okvira, mogu se dinamički mijenjati na web-stranici, no položaj okvira ostat će isti. U takvom se slučaju ne možemo osloniti na ID okvira ili naziv okvira za jedinstvenu identifikaciju okvira.
- Možemo koristiti indeks okvira u takvom slučaju za jedinstvenu identifikaciju okvira na temelju položaja okvira.
- U nekim se slučajevima vrijednost id okvira mijenja svaki put kad se stranica učita, ali sa statičnim tekstom koji se ne mijenja. Na primjer , razmotrite donji kod za iframe-ove.
U gornjem primjeru tekst 'frame_' ostaje konstantan dok se numerička vrijednost mijenja sa svakim učitavanjem stranice.
- Gornji okvir možemo jedinstveno identificirati pomoću donjeg XPath
// iframe (sadrži (@ id, 'okvir'))
AŽURIRANJE ožujka 2020
Kako locirati elemente unutar okvira
U Selenu, da bismo pristupili elementima koji su prisutni unutar okvira, prvo se moramo prebaciti unutar okvira, a zatim identificirati elemente kao što to obično činimo koristeći različite selenove lokatore. Vaš selenijski kôd ne može pronaći vaše elemente, bez prebacivanja u IFrame.
Snimka zaslona u nastavku prikazuje kako su okviri ugrađeni u HTML kôd:
Različiti načini prelaska na IFrame pomoću selena
# 1) Korištenje naziva okvira ili ID-a
Prebacite se na IFrame koristeći naziv okvira ili ID okvira, ponekad će se u kodu nalaziti ili naziv okvira ili ID ili oboje.
Sintaksa:
driver.switchTo().frame(1); // for id driver.switchTo().frame('main'); // for name
# 2) Korištenje indeksa okvira
Pronađite okvir pomoću indeksa okvira ako je dostupan.
Sintaksa:
driver.switchTo().frame(0); // frame index starts with 0
# 3) Korištenje web elementa
Pronađite okvir pomoću selenskih lokatora .
Sintaksa:
driver.switchTo().frame('Locate the frame using xpath or by any other locator');
Ostale operacije pomoću okvira
# 1) Prebacivanje natrag na okvir roditelja ili pretka
Vraćanje s okvira 3 na okvir 2 pomoću naredbe 'switchTo.parentFrame' .
Sintaksa:
driver.switchTo().parentFrame();
# 2) Prebacivanje na bilo koji drugi okvir
Ako želite prijeći s okvira 3 na okvir 1 ili zadani okvir, tada upotrijebite naredbu 'switchTo.defaultContent'.
Sintaksa:
driver.switchTo().defaultContent();
U donjem kodu nalazimo okvir za tekst imena koji se nalazi unutar okvira.
Što ako ga pokušamo izravno locirati bez prebacivanja u okvir?
Pogledajmo rezultat:
Kôd nije uspio s razlogom 'Nije moguće pronaći element: {' method ':' xpath ',' selector ':' // input (@ name = 'name') '}}
Sada se prebacite unutar okvira pomoću Web elementa ili recite pomoću lokatora Selenium i pronađite polje tekstualnog okvira.
Dolje je dat cjeloviti kod za prebacivanje unutar okvira:
package com.wordpress.pages; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Frame { static WebDriver driver; @Test public void Test(){ System.setProperty('webdriver.chrome.driver', 'D:\Srinivas\New folder\exe\chromedriver.exe'); driver = new ChromeDriver(); driver.get('http://www.dwuser.com/education/content/the-magical-iframe-tag-an-introduction/'); //identifying the frame using locator or say using webelement driver.switchTo().frame(driver.findElement(By.xpath('//div(@id='eduFooterWrap')//iframe(1)'))); driver.findElement(By.xpath('//input(@name='name')')).sendKeys('SoftwareTestingHelp.com'); } }
Izlaz:
Tako trebamo prebacivati između okvira za lociranje elemenata pomoću selena. Ako na vašoj web stranici ima više okvira, trebate se prebaciti više puta.
Zaključak
- iFrame je HTML dokument ugrađen u drugi HTML dokument. iFrames se izričito spominju u HTML dokumentu pomoću HTML oznake
- metoda switchTo.frame (int frameNumber) omogućava korisnicima da se prebace na određeni okvir pomoću ID-a okvira.
- metoda switchTo.frame (string frameName) omogućuje korisnicima prelazak na određeni okvir pomoću naziva okvira definiranog od strane programera.
- metoda switchTo.frame (WebElement frameElement) omogućuje korisnicima da se prebace na okvir na temelju mjesta Web elementa.
=> Ovdje provjerite SVE tutorijale za selenij.
Preporučena literatura
- Vodič za krastavac selenij: Integracija Java Selenium WebDriver krastavaca
- Uvod u Selenium WebDriver - Vodič za selen br. 8
- Implementacija naše prve skripte WebDriver - Vodič br. 10 za Selenium WebDriver
- Česta pitanja o selenu
- Kako postupati s upozorenjima / skočnim prozorima u programu Selenium WebDriver - Vodič za selenij br. 16
- Rukovanje web tablicama, okvirima i dinamičkim elementima u skriptu Selenium - Vodič za selen # 18
- Implicitno i eksplicitno čekanje u Selenium WebDriver (vrste selenovih čekanja)
- Vodič za generiranje opsežnih izvješća u Selenium WebDriver