handling iframes using selenium webdriver switchto method
како створити нову јава датотеку у ецлипсе-у
Руковање иФрамовима помоћу селениум ВебДривер-а: Практични водич са практичним примерима
иФраме (инлине фраме) је ХТМЛ документ уграђен у други ХТМЛ документ.
иФрамес се најчешће користе за приказивање огласа на веб страници. иФрамес се изричито помињу у ХТМЛ документу помоћу ХТМЛ ознаке
Ово упутство ће вам објаснити све о руковању ифрам-овима у селенијуму, заједно са одговарајућим примерима кода за ваше лако разумевање.
=> Прочитајте серију Еаси Траининг за селен.
Шта ћете научити:
- Руковање иФрамовима помоћу селена
- АЖУРИРАЊЕ марта 2020
- Закључак
Руковање иФрамовима помоћу селена
Уоквирени оквир унутар веб странице може се идентификовати у прегледачу Фирефок ако је опција названа „Овај оквир“ приказана на опцијама десног клика, као што је приказано доле.
Алтернативно, такође можемо да потврдимо да ли веб страница има било који ифраме, тако што ћемо погледати изворни код и потражити ознаку
List iframes = driver.findElements(By.tagName(“iframe”));
Методе које пружа селен за руковање иФрамес-ом
Селениум пружа следеће уграђене методе за пребацивање напред-назад са ифраме-ова.
- свитцхТо.фраме (инт фрамеНумбер)
- свитцхТо.фраме (стринг фрамеНаме)
- свитцхТо.фраме (ВебЕлемент фрамеЕлемент)
- свитцхТо (). дефаултЦонтент ()
# 1) свитцхТо.фраме (инт фрамеНумбер)
- Ова метода омогућава корисницима да се пребаце на одређени оквир помоћу ИД-а оквира.
- Број оквира је вредност индекса заснована на нули, што значи да први оквир веб странице има индекс 0, други оквир индекс 1, а трећи оквир индекс 3 и тако даље.
- Број оквира се такође може идентификовати помоћу ИД-а оквира елемента. То може учинити Кликните десним тастером миша -> Прегледај елемент и потражите иФраме. Потврдите да ли било који иФрамес има атрибут ИД.
Узорак ифраме елемента на изворном коду изгледаће како је поменуто у наставку.
Једном када је идентификован ид иФраме-а, можемо га користити за прелазак на оквир као доле.
Примери:
дривер.свитцхТо.фраме (“а077аа5е”);
дривер.свитцхТо.фраме (0);
- Овај метод баца НоСуцхФрамеЕкцептион када тражени оквир није пронађен на тренутној веб страници.
# 2) свитцхТо.фраме (стринг фрамеНаме)
- Овај метод омогућава корисницима да се пребаце на одређени оквир помоћу назива оквира дефинисаног од стране програмера.
- Име оквира мора бити затворено у двоструке наводнике да би се сматрало параметром Стринг.
- Овај метод баца НоСуцхФрамеЕкцептион када тражени оквир није пронађен на тренутној веб страници.
Пример:
У горе поменутом коду, и ИД оквира и име оквира имају исту вредност. Прелазак на оквир може се извршити помоћу имена оквира као што је приказано доле:
дривер.свитцхТо.фраме (“а077аа5е”);
# 3) свитцхТо.фраме (ВебЕлемент фрамеЕлемент)
- Ова метода омогућава корисницима да пређу на оквир заснован на локацији Веб елемента.
- Овај метод баца НоСуцхФрамеЕкцептион када тражени кадар није присутан на веб страници и СталеЕлементРеференцеЕкцептион ако оквир приказан на веб страници није активан.
Пример:
ВебЕлемент фрамеЕлемент = дривер.финдЕлемент (Би.ид („а077аа5е“));
дривер.свитцхТо.фраме (фрамеЕлемент);
# 4) свитцхТо (). ДефаултЦонтент ()
- Пребацивање напред-назад између ифраме-ова и надређене странице може се постићи методом дривер.свитцхТо (). ДефаултЦонтент ().
- Имајте на уму да у Селену постоји слична метода за пребацивање између оквира са именом дривер.свитцхТо (). ПарентФраме ().
- Разлика између дривер.свитцхТо (). ДефаултЦонтент () и дривер.свитцхТо (). ПарентФраме () је у томе што прва метода пребацује контролу на главну веб страницу без обзира на број оквира унутар веб странице, док друга метода пребацује контролу на надређени оквир тренутног оквира.
Пример:
Претпоставимо да постоје три оквира названа и1, и2 и и3 унутар родитељске веб странице п1. Оквири и1, и2 и и3 зависе једни од других, што значи да ће један оквир бити родитељ другог.
Користећи дривер.свитцхТо (). ДефаултЦонтент () методу на оквиру и3, контрола веб управљачког програма премешта се на надређену страницу, п1. Док метода дривер.свитцхТо (). ПарентФраме () на оквиру и3 пребацује контролу назад у оквир и2 и тако даље.
Узорак изворног кода:
Испод је тест сценарио који треба аутоматизовати помоћу ифрамеова у селену:
- Отворите веб локацију СофтвареТестингХелп.цом.
- Пронађите све ХТМЛ елементе са ознаком ифраме, избројте број појављивања иФраме-а и одштампајте га на конзоли.
- Пребаците се на важећи кадар на веб страници помоћу ИД-а оквира и одштампајте изворни код оквира.
- Затворите тренутни прозор прегледача.
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(); } }
Излаз кода:
Отворите веб локацију: хттпс://ввв.софтваретестингхелп.цом
Пребаците се на оквир са именом асвифт_0.
Одштампајте број ифраме-ова на веб страници у прозору конзоле ецлипсе.
Одштампајте изворни код оквира на конзоли ецлипсе након преласка на оквир.
Објашњење кода:
- Иницијализујемо објекат гецко управљачког програма помоћу методе Систем.сетПроперти како би указали на путању датотеке гецкодривер.еке на локалној машини.
- Потом правимо инстанцирање објекта ФиреФок управљачког програма путем интерфејса ВебДривер.
- Помоћу објекта управљачког програма за Фирефок отворила се следећа веб страница: хттпс://ввв.софтваретестингхелп.цом.
- У следећем кораку идентификујемо број ифраме елемената приказаних на веб страници, пребројавамо их и приказујемо ифраме бројеве на конзоли ецлипсе.
- Користећи ИД оквира, прелазимо на оквир на веб страници. У горњем случају, ИД оквира је „асвифт_0“.
- Када смо успешно прешли на кадар, исписујемо изворни код оквира на конзоли ецлипсе.
- Затим се враћамо на матичну веб страницу помоћу наредбе дривер.свитцхТо (). ДефаултЦонтент () и коначно затварамо инстанцу веб управљачког програма помоћу методе дривер.куит.
Разлика између оквира и иФраме-а у селенијуму
- Оквир се користи за поделу странице на више одељака, са новим садржајем у сваком одељку.
- ИФраме се користи за уграђивање садржаја спољних веб локација у веб страницу, како би се избегли проблеми скриптирања на више локација.
- Сматра се да је иФраме мање сигуран од оквира, јер иФраме омогућава програмерима да уграђују садржај са веб локација независних произвођача. Дакле, ифраме захтева од програмера да верује садржају који је уградио у ифраме.
- Већина веб апликација које се данас развијају не користе оквире за поделу странице, већ користе ифрамеове за уграђивање спољног садржаја као што су огласи у веб страницу.
Руковање динамичким рамовима у селену
- На неким веб страницама, својства оквира као што су ИД оквира и име оквира могу се динамички мењати на веб страници, међутим, положај оквира остаће исти. У том случају се не можемо ослонити на ИД оквира или име оквира за јединствену идентификацију оквира.
- Можемо да користимо индекс оквира у том случају за јединствену идентификацију оквира на основу положаја оквира.
- У неким случајевима, вредност ИД-а оквира се мења сваки пут када се страница учита, али са статичним текстом који се не мења. На пример , размотрите доњи код за ифраме-ове.
У горњем примеру, текст „оквир_“ остаје константан док се нумеричка вредност мења са сваким учитавањем странице.
- Горњи кадар можемо јединствено идентификовати помоћу доњег КСПатх
// ифраме (садржи (@ ид, ’оквир’))
АЖУРИРАЊЕ марта 2020
Како лоцирати елементе унутар оквира
У селенијуму, да бисмо приступили елементима који су присутни унутар оквира, прво морамо да се пребацимо унутар оквира, а затим идентификујемо елементе као што то обично радимо користећи различите селенерове локаторе. Ваш селенијски код не може лоцирати ваше елементе, без пребацивања у ИФраме.
Снимак екрана испод приказује како су оквири уграђени у ХТМЛ код:
Различити начини преласка на ИФраме помоћу селена
# 1) Коришћење имена оквира или ИД-а
Пребаците се на ИФраме користећи име оквира или ИД оквира, понекад ће у коду бити или име оквира или ИД или обоје.
Синтакса:
driver.switchTo().frame(1); // for id driver.switchTo().frame('main'); // for name
# 2) Коришћење индекса оквира
Пронађите кадар користећи индекс оквира ако је доступан.
Синтакса:
driver.switchTo().frame(0); // frame index starts with 0
# 3) Коришћење веб елемента
Пронађите оквир помоћу селенских локатора .
Синтакса:
driver.switchTo().frame('Locate the frame using xpath or by any other locator');
Остале операције помоћу оквира
# 1) Враћање на родитељски или претковски оквир
Пребацивање са оквира 3 на кадар 2 помоћу команде „свитцхТо.парентФраме“ .
Синтакса:
driver.switchTo().parentFrame();
# 2) Пребацивање на било који други оквир
Ако желите да пређете са оквира 3 на оквир 1 или задати оквир, тада користите команду „свитцхТо.дефаултЦонтент“.
Синтакса:
driver.switchTo().defaultContent();
У доњем коду лоцирамо оквир за текст имена који се налази унутар оквира.
Шта ако покушамо да га лоцирамо директно без пребацивања у оквир?
Да видимо резултат:
Код није успео из разлога „Није могуће пронаћи елемент: {„ метход “:„ кпатх “,„ селецтор “:„ // инпут (@ наме = ’наме’) ”}}
Сада се пребаците унутар оквира помоћу Веб Елемента или реците помоћу локатора Селениум и пронађите поље за текст.
Доље је дат комплетни код за пребацивање унутар оквира:
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'); } }
Излаз:
Тако треба да се пребацујемо између оквира за лоцирање елемената помоћу селена. Ако на вашој веб страници има више оквира, тада морате да се пребаците више пута.
Закључак
- иФраме је ХТМЛ документ уграђен у други ХТМЛ документ. иФрамес су изричито наведени у ХТМЛ документу помоћу ХТМЛ ознаке
- метода свитцхТо.фраме (инт фрамеНумбер) омогућава корисницима да се пребаце на одређени оквир помоћу ИД-а оквира.
- метода свитцхТо.фраме (стринг фрамеНаме) омогућава корисницима да се пребаце на одређени оквир помоћу назива оквира који дефинише програмер.
- метод свитцхТо.фраме (ВебЕлемент фрамеЕлемент) омогућава корисницима да се пребаце на оквир на основу локације Веб елемента.
=> Овде погледајте СВЕ туторијале о селену.
Препоручено читање
- Водич за краставац селениј: Интеграција Јава Селениум ВебДривер краставца
- Увод у Селениум ВебДривер - Водич за селен бр. 8
- Примена наше прве скрипте за ВебДривер - Водич бр. 10 за Селениум ВебДривер
- Честа питања о селену
- Како се рукује упозорењима / искачућим прозорима у програму Селениум ВебДривер - Водич за селен # 16
- Руковање веб табелама, оквирима и динамичким елементима у скрипту Селениум - Водич за селен # 18
- Имплицитно и експлицитно чекање у Селениум ВебДривер-у (врсте селенијских чекања)
- Водич за генерисање екстензивних извештаја у програму Селениум ВебДривер