handling iframes using selenium webdriver switchto method
bedste værktøj til fjernelse af malware til Windows 10
Håndtering af iFrames ved hjælp af Selen WebDriver: Praktisk vejledning med praktiske eksempler
iFrame (inline frame) er et HTML-dokument indlejret i et andet HTML-dokument.
iFrames bruges mest til visning af reklamer på en webside. iFrames nævnes eksplicit i HTML-dokument ved hjælp af HTML-tagget
Denne vejledning forklarer dig alt om håndtering af iframes i Selen sammen med de pågældende kodeeksempler for din nemme forståelse.
=> Læs igennem Easy Selenium Training Series.
Hvad du vil lære:
- Håndtering af iFrames ved hjælp af selen
- OPDATERING marts 2020
- Konklusion
Håndtering af iFrames ved hjælp af selen
En iframe på en webside kan identificeres i Firefox-browseren, hvis indstillingen med navnet 'Denne ramme' vises på højreklikindstillingerne som vist nedenfor.
Alternativt kan vi også validere, hvis en webside har nogen iframes ved at se på kildekoden og søge efter tagget
List iframes = driver.findElements(By.tagName(“iframe”));
Metoder leveret af selen til håndtering af iFrames
Selen leverer følgende indbyggede metoder til at skifte frem og tilbage fra iframes.
- switchTo.frame (int frameNumber)
- switchTo.frame (string frameName)
- switchTo.frame (WebElement frameElement)
- switchTo (). defaultContent ()
# 1) switchTo.frame (int frameNumber)
- Denne metode giver brugerne mulighed for at skifte til en bestemt ramme ved hjælp af ramme-id'et.
- Rammenummeret er en nulbaseret indeksværdi, hvilket betyder at den første ramme på websiden har indekset 0, den anden ramme har indekset 1, og den tredje ramme har indekset 3 og så videre.
- Rammenummer kan også identificeres ved hjælp af elementets ramme-id. Dette kan gøres ved Højreklik -> Undersøg element, og søg efter iFrame. Valider, hvis nogen af iFrames har en ID-attribut.
Eksempel på iframe-element på kildekoden ville se ud som nævnt nedenfor.
Når id'et til iFrame er identificeret, kan vi bruge det samme til at skifte til rammen som nedenfor.
Eksempler:
driver.switchTo.frame (“a077aa5e”);
driver.switchTo.frame (0);
- Denne metode kaster NoSuchFrameException, når den nødvendige ramme ikke findes på den aktuelle webside.
# 2) switchTo.frame (string frameName)
- Denne metode giver brugerne mulighed for at skifte til en bestemt ramme ved hjælp af det udviklerdefinerede navn på rammen.
- Rammenavn skal være indeholdt i dobbelt anførselstegn for at det kan betragtes som en strengparameter.
- Denne metode kaster NoSuchFrameException, når den nødvendige ramme ikke findes på den aktuelle webside.
Eksempel:
I ovennævnte kode har både ramme-id og ramme navn den samme værdi. Skift til ramme kan udføres ved hjælp af rammenavnet som nedenfor:
driver.switchTo.frame (“a077aa5e”);
# 3) switchTo.frame (WebElement frameElement)
- Denne metode giver brugerne mulighed for at skifte til en ramme baseret på placeringen af webelementet.
- Denne metode kaster NoSuchFrameException, når den krævede ramme ikke er til stede på websiden og StaleElementReferenceException, hvis rammen, der vises på websiden, ikke er aktiv.
Eksempel:
WebElement frameElement = driver.findElement (By.id (“a077aa5e”));
driver.switchTo.frame (frameElement);
# 4) switchTo (). DefaultContent ()
- Skift frem og tilbage mellem iframes og overordnet side kan opnås ved hjælp af driver.switchTo (). DefaultContent () -metoden.
- Bemærk, at der er en lignende metode i Selen til at skifte mellem rammer med navnet driver.switchTo (). ParentFrame () -metoden.
- Forskellen mellem driver.switchTo (). DefaultContent () og driver.switchTo (). ParentFrame () er, at den første metode skifter kontrol til hovedwebsiden uanset antallet af rammer på websiden, mens den anden metode skifter kontrolelementet til den overordnede ramme for den aktuelle ramme.
Eksempel:
Antag at der er tre rammer med navnet i1, i2 og i3 inden for den overordnede webside p1. Rammer i1, i2 og i3 er afhængige af hinanden, hvilket betyder at en ramme vil være forælder til en anden.
Ved hjælp af driver.switchTo (). DefaultContent () -metode på ramme i3 flytter webdriverstyring til overordnet side, p1. Mens driver.switchTo (). ParentFrame () -metoden på ramme i3 skifter kontrolelementet tilbage til ramme i2 og så videre.
Kildekodeeksempel:
Nedenfor er testscenariet, der skal automatiseres ved hjælp af iframes i selen:
- Åbn webstedet SoftwareTestingHelp.com.
- Find alle HTML-elementerne med tag iframe, tæl antallet af forekomster af iFrame og udskriv det på en konsol.
- Skift til en gyldig ramme på websiden ved hjælp af ramme-id'et og udskriv kildekoden til rammen.
- Luk det aktuelle browservindue.
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(); } }
Kodeoutput:
Åbn hjemmesiden: https://www.softwaretestinghelp.com
Skift til rammen med navnet aswift_0.
Udskriv antallet af iframes på websiden i eclipse-konsolvinduet.
Udskriv kildekoden til rammen på formørkelseskonsollen efter skift til rammen.
Kode Forklaring:
- Vi initialiserer et objekt fra gecko-driveren ved hjælp af System.setProperty-metoden for at pege på geckodriver.exe-filstien på den lokale maskine.
- Vi instantierer derefter et objekt fra FireFox-driveren via WebDriver-grænsefladen.
- Ved hjælp af Firefox-driverobjektet åbnes følgende webside: https://www.softwaretestinghelp.com.
- I det næste trin identificerer vi antallet af iframe-elementer, der vises på websiden, tæller dem og viser iframe-antallet på eclipse-konsollen.
- Ved hjælp af ramme-id skifter vi til rammen på websiden. I ovennævnte tilfælde er ramme-id'et 'aswift_0'.
- Når vi har skiftet til rammen med succes, udskriver vi kildekoden til rammen på formørkelseskonsollen.
- Vi skifter derefter tilbage til den overordnede webside ved hjælp af driver.switchTo (). DefaultContent () -erklæring og til sidst lukke webdriverinstansen ved hjælp af metoden driver.quit.
Forskel mellem ramme og iFrame i selen
- En ramme bruges til at opdele en side i flere sektioner med nyt indhold i hver sektion.
- En iFrame bruges til at integrere indholdet af de eksterne websteder på websiden for at undgå problemer med scripting på tværs af websteder.
- En iFrame anses for at være mindre sikker end en ramme, da iFrame tillader udviklere at integrere indhold fra tredjepartswebsteder. Således kræver en iframe, at en udvikler har tillid til det indhold, som han har integreret i iframe.
- De fleste af de webapplikationer, der udvikles i dag, bruger ikke rammer til at dele siden, men de bruger snarere iframes til at integrere eksternt indhold, såsom reklamer på websiden.
Håndtering af dynamiske rammer i selen
- På nogle websider kan rammeegenskaber som ramme-id og rammenavn ændre sig dynamisk på en webside, men rammepositionen forbliver den samme. I et sådant tilfælde kan vi ikke stole på, at ramme-id'et eller rammenavnet entydigt identificerer en ramme.
- Vi kan bruge rammeindeks i et sådant tilfælde at identificere rammen entydigt baseret på rammepositionen.
- I nogle tilfælde ændres ramme-id-værdi hver gang siden indlæses, men med en statisk tekst, der ikke ændres. For eksempel , overvej nedenstående kode for iframes.
I ovenstående eksempel forbliver teksten 'frame_' konstant, mens den numeriske værdi ændres med hver sideindlæsning.
- Vi kan identificere ovenstående ramme entydigt ved hjælp af nedenstående XPath
// iframe (indeholder (@ id, 'frame'))
OPDATERING marts 2020
Sådan finder du elementerne inde i rammen
For at få adgang til de elementer, der er til stede inden i rammen, i Selen skal vi først skifte inde i rammen og derefter identificere elementerne, som vi normalt gør ved hjælp af forskellige Selen-lokalisatorer. Din Selenium-kode kan ikke finde dine elementer uden at skifte til IFrame.
Nedenstående skærmbillede viser, hvordan rammer er indlejret i en HTML-kode:
Forskellige måder at skifte til en IFramme ved hjælp af selen
# 1) Brug af rammenavn eller id
Skift til IFrame ved hjælp af rammenavn eller ramme-id, undertiden vil enten rammenavn eller id eller begge være til stede i en kode.
Syntaks:
driver.switchTo().frame(1); // for id driver.switchTo().frame('main'); // for name
# 2) Brug af rammeindeks
Find rammen ved hjælp af rammeindekset, hvis det er tilgængeligt.
Syntaks:
driver.switchTo().frame(0); // frame index starts with 0
# 3) Brug af webelement
Find rammen ved hjælp af Selenium locators .
Syntaks:
driver.switchTo().frame('Locate the frame using xpath or by any other locator');
Andre handlinger ved hjælp af ramme
# 1) Skift tilbage til forældren eller forfædren
Skift tilbage fra ramme 3 til ramme 2 ved hjælp af kommandoen “switchTo.parentFrame” .
Syntaks:
driver.switchTo().parentFrame();
# 2) Skift til enhver anden ramme
Hvis du vil skifte fra ramme 3 til ramme 1 eller standardrammen, skal du bruge kommandoen “switchTo.defaultContent”.
Syntaks:
driver.switchTo().defaultContent();
I nedenstående kode finder vi et navnetekstfelt til stede inde i en ramme.
Hvad hvis vi prøver at finde det direkte uden at skifte til rammen?
Lad os se resultatet:
Koden mislykkedes med grunden 'Kan ikke finde element: {' metode ':' xpath ',' selector ':' // input (@ name = 'name') '}
Skift nu inden i rammen ved hjælp af Web Element, eller sig ved hjælp af Selenium locator, og find tekstfeltfeltet.
Nedenfor er den komplette kode til at skifte inde i rammen:
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'); } }
Produktion:
Sådan skal vi skifte mellem rammerne for at lokalisere elementerne ved hjælp af selen. Hvis der er flere rammer på din webside, skal du skifte flere gange.
Konklusion
- iFrame er et HTML-dokument indlejret i et andet HTML-dokument. iFrames nævnes eksplicit i HTML-dokumentet ved hjælp af HTML-tagget
- switchTo.frame (int frameNumber) -metoden giver brugerne mulighed for at skifte til en bestemt ramme ved hjælp af ramme-id'et.
- switchTo.frame (string frameName) -metoden giver brugerne mulighed for at skifte til en bestemt ramme ved hjælp af det udviklerdefinerede navn på rammen.
- switchTo.frame (WebElement frameElement) -metoden giver brugerne mulighed for at skifte til en ramme baseret på placeringen af webelementet.
=> Tjek ALLE Selen-vejledninger her.
Anbefalet læsning
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Introduktion til Selen WebDriver - Selen Tutorial # 8
- Implementering af vores første WebDriver Script - Selenium WebDriver Tutorial # 10
- Ofte stillede spørgsmål om selen
- Sådan håndteres alarmer / pop op-vinduer i Selen WebDriver - Selen-vejledning nr. 16
- Håndtering af webtabeller, rammer og dynamiske elementer i Selenium Script - Selen Tutorial # 18
- Implicit og eksplicit Vent i Selen WebDriver (Typer af Selen Waits)
- Vejledning til generering af omfattende rapporter i Selen WebDriver