iFrame selēna tīmekļa draiverī
iFrame in Selenium Webdriver ir tīmekļa lapa vai iekļauts rāmis, kas ir iestrādāts citā tīmekļa lapā, vai HTML dokuments, kas iestrādāts citā HTML dokumentā. Iframe bieži izmanto, lai tīmekļa lapā pievienotu saturu no citiem avotiem, piemēram, reklāmas. Iframe ir definēts ar tagu < iframe >.
Šajā apmācībā jūs uzzināsiet -
- Kā identificēt iframe:
- Kā pārslēgt iframe elementus, izmantojot Web draivera komandas:
- Ligzdoto rāmju (rāmji rāmjos) jēdziens:
Kā identificēt iframe:
Mēs nevaram noteikt rāmjus, vienkārši redzot lapu vai pārbaudot Firebug.
Ievērojiet zemāk redzamo attēlu, jo reklāma tiek rādīta kā Iframe, mēs to nevaram atrast vai atpazīt, vienkārši pārbaudot, izmantojot Firebug. Tātad jautājums ir, kā jūs varat identificēt iframe?

Mēs varam identificēt rāmjus Selenium, izmantojot tālāk norādītās metodes:
- Ar peles labo pogu noklikšķiniet uz elementa. Ja atrodat opciju, piemēram, "Šis rāmis", tas ir iframe. (Lūdzu, skatiet iepriekšējo diagrammu)
- Ar peles labo pogu noklikšķiniet uz lapas un noklikšķiniet uz "Skatīt lapas avotu" un meklējiet ar "iframe", ja ar "iframe" varat atrast jebkuru taga nosaukumu, tas nozīmē teikt lapu, kas sastāv no iframe.
Iepriekš redzamajā diagrammā jūs varat redzēt, ka opcija " Šis rāmis " ir pieejama, noklikšķinot ar peles labo pogu, tāpēc mēs tagad esam pārliecināti, ka tas ir iframe.
Izmantojot zemāk redzamo fragmentu, mēs pat varam noteikt kopējo iframe ietvaru skaitu.
Int lielums = driver.findElements (By.tagName ("iframe"))). Size ();
Kā pārslēgt iframe elementus, izmantojot Web draivera komandas:
Būtībā mēs varam pārslēgt elementus un apstrādāt rāmjus Selenium, izmantojot 3 veidus.
- Pēc rādītāja
- Pēc vārda vai ID
- Autors Web Element
Pārslēgties uz kadru pēc rādītāja:
Indekss ir viens no rāmju apstrādes atribūtiem Selenium, caur kuru mēs varam pāriet uz to.
Iframe rādītājs sākas ar '0'.
Pieņemsim, ka, ja lappusē ir 100 kadri, mēs varam pāriet uz rāmi Selenium, izmantojot indeksu.
- driver.switchTo (). rāmis (0);
- driver.switchTo (). rāmis (1);
Pārslēdzieties uz rāmi pēc nosaukuma vai ID:
Nosaukums un ID ir atribūti rāmju apstrādei Selenium, caur kuriem mēs varam pāriet uz iframe.
- driver.switchTo (). frame ("iframe1");
- driver.switchTo (). frame ("elementa id");
Pārslēgšanās uz iframe caur ID piemērs:
Ņemsim piemēru, lai pārslēgtu rāmi Selenium, kas parādīts zemāk esošajā attēlā. Mūsu prasība ir noklikšķināt uz iframe.
Mēs varam piekļūt šim iframe, izmantojot šo vietrādi URL: http: //demo.guru99.com/test/guru99home/
Nav iespējams noklikšķināt iframe tieši caur XPath, jo tas ir iframe. Vispirms mums ir jāpārslēdzas uz rāmi un pēc tam mēs varam noklikšķināt, izmantojot xpath.
1. darbība)
WebDriver draiveris = jauns FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiveris.pārvaldīt (). logs (). maksimizēt ();
- Mēs inicializējam Firefox draiveri.
- Pārejiet uz vietni "guru99", kas sastāv no iframe.
- Palielināja logu.
2. solis)
driver.switchTo (). frame ("a077aa5e");
- Šajā solī mums jānoskaidro iframe ID, pārbaudot, izmantojot Firebug.
- Pēc tam pārslēdzieties uz iframe caur ID.
3. solis)
driver.findElement (By.xpath ("html / body / a / img")). noklikšķiniet ();
- Šeit mums jānoskaidro elementa xpath, uz kura jānoklikšķina.
- Noklikšķiniet uz elementa, izmantojot iepriekš parādīto tīmekļa draivera komandu.
Šeit ir pilns kods:
publiskā klase SwitchToFrame_ID {public static void main (String [] args) {WebDriver draiveris = jauns FirefoxDriver (); // virzās uz pārlūkudriver.get ("http://demo.guru99.com/test/guru99home/");// pārvietojas uz lapu, kas sastāv no iframedraiveris.pārvaldīt (). logs (). maksimizēt ();driver.switchTo (). frame ("a077aa5e"); // kadra pārslēgšana pēc IDSystem.out.println ("******** Mēs pārslēdzamies uz iframe *******");driver.findElement (By.xpath ("html / body / a / img")). noklikšķiniet ();// noklikšķina uz iframeSystem.out.println ("********* Mēs esam pabeiguši ***************");}}
Izeja:
Pārlūks pārvietojas uz lapu, kas sastāv no iepriekš minētā iframe, un noklikšķina uz iframe.
Pārslēgties uz rāmi, izmantojot Web Element:
Mēs pat varam pāriet uz iframe, izmantojot tīmekļa elementu.
- driver.switchTo (). rāmis (WebElement);
Kā pārslēgties atpakaļ uz galveno rāmi
Mums ir jāiziet no iframe.
Lai pārietu atpakaļ uz vecāku rāmi, varat izmantot vai nu switchTo (). ParentFrame (), vai arī, ja vēlaties atgriezties pie galvenā (vai lielākā daļa vecāku) rāmja, varat izmantot switchTo (). DefaultContent ();
driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();
Kā pārslēgties uz rāmi, ja mēs NEVARAM pārslēgties, izmantojot ID vai tīmekļa elementu:
Pieņemsim, ja lapā ir 100 kadri un nav pieejams ID, šajā gadījumā mēs vienkārši nezinām, no kura tiek ielādēts iframe nepieciešamais elements (Tas ir gadījumā, kad mēs nezinām rāmja indeksu arī).
Risinājums iepriekšminētajām bažām ir tāds, ka mums jāatrod iframe indekss, caur kuru elements tiek ielādēts, un pēc tam mums ir jāpāriet uz iframe caur indeksu.
Tālāk ir norādītas darbības, lai atrastu rāmja indeksu, pēc kura elements tiek ielādēts, izmantojot zemāk esošo fragmentu
1. darbība)
WebDriver draiveris = jauns FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiveris.pārvaldīt (). logs (). maksimizēt ();
- Inicializējiet Firefox draiveri.
- Pārejiet uz vietni "guru99", kas sastāv no iframe.
- Palielināja logu.
2. solis)
int izmērs = draiveris.findElements (By.tagName ("iframe")). izmērs ();
- Iepriekš minētais kods atrod tagā esošo iframe kopējo skaitu, izmantojot taga nosaukumu 'iframe'.
3. solis)
Mērķis par šo posmu būtu noskaidrot indeksu iframe.
par (int i = 0; i <= izmērs; i ++) {driver.switchTo (). rāmis (i);int total = driver.findElements (By.xpath ("html / body / a / img")). izmērs ();System.out.println (kopā);driver.switchTo (). defaultContent ();}
Virs “forloop” tiek atkārtoti visi lapā esošie iframes un tiek izdrukāts “1”, ja mūsu nepieciešamais iframe tika atrasts, citādi atgriež “0”.
Šeit ir pilns kods līdz 3. darbībai:
public class IndexOfIframe {public static void main (String [] args) {WebDriver draiveris = jauns FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiveris.pārvaldīt (). logs (). maksimizēt ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int izmērs = draiveris.findElements (By.tagName ("iframe")). izmērs ();par (int i = 0; i <= izmērs; i ++) {driver.switchTo (). rāmis (i);int total = driver.findElements (By.xpath ("html / body / a / img")). izmērs ();System.out.println (kopā);driver.switchTo (). defaultContent ();}}}
Izpildiet šo programmu, un izvade būtu šāda:
Izeja:
100000Pārbaudiet izvadi, jūs varat atrast 0 un 1 sērijas.
- Kur vien izvadā atrodat “1”, tas ir rāmja indekss, ar kuru elements tiek ielādēts.
- Tā indekss iFrame sākas ar "0", ja jums atrast 1 no 1 st vietu, tad indekss ir 0.
- Ja atrodat 1 trešo vietu, indekss ir 2.
driver.switchTo (). rāmis (0);
- Kad esat atradis elementa indeksu, varat pārslēgties uz rāmi, izmantojot iepriekš minēto komandu.
- driver.switchTo (). rāmis (indekss atrodams 3. darbībā);
driver.findElement (By.xpath ("html / body / a / img")). noklikšķiniet ();
- Iepriekš minētais kods noklikšķinās uz iframe vai elementa iframe.
publiskā klase SwitchToframe {public static void main (String [] args) throws NoSuchElementException {WebDriver draiveris = jauns FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");draiveris.pārvaldīt (). logs (). maksimizēt ();// int lielums = draiveris.findElementi (By.tagName ("iframe")). size ();/ * par (int i = 0; i <= izmērs; i ++) {driver.switchTo (). rāmis (i);int total = driver.findElements (By.xpath ("html / body / a / img")). izmērs ();System.out.println (kopā);driver.switchTo (). defaultContent (); // pārslēgšanās atpakaļ no iframe} * /// Komentēja kodu, lai atrastu elementa indeksudriver.switchTo (). rāmis (0); // Pārslēgšanās uz rāmiSystem.out.println ("******** Mēs esam pārslēgti uz iframe *******");driver.findElement (By.xpath ("html / body / a / img")). noklikšķiniet ();// Noklikšķinot uz elementa saskaņā ar ReklāmaSystem.out.println ("********* Mēs esam pabeiguši ***************");}}Izeja: Pārlūks pāriet uz lapu, kas sastāv no iepriekš minētā iframe, un noklikšķina uz iframe.
Ligzdoto rāmju (rāmji rāmjos) jēdziens:
Pieņemsim, ka iekšpusē ir divi rāmji, kā parādīts zemāk esošajā attēlā, un mūsu prasība ir drukāt tekstu ārējā rāmī un iekšējā rāmī. Ligzdotu rāmju gadījumā- Sākumā mums jāpārslēdzas uz ārējo rāmi, izmantojot indeksu vai iframe ID
- Kad mēs pārslēdzamies uz ārējo rāmi, mēs varam atrast kopējo iframe skaitu ārējā rāmī un
- Mēs varam pāriet uz iekšējo rāmi ar jebkuru no zināmajām metodēm.

Iepriekš ievietotā rāmja HTML kods ir parādīts zemāk.
Iepriekš minētais HTML kods skaidri izskaidro iframe tagu (izcelts zaļā krāsā) citā iframe tagā, norādot ligzdotu iframe rāmju klātbūtni.
Tālāk ir norādītas darbības, kā pāriet uz ārējo rāmi un tekstu drukāt uz ārējiem rāmjiem: 1. darbība.
WebDriver draiveris = jauns FirefoxDriver ();draiveris.get ("Url");draiveris.pārvaldīt (). logs (). maksimizēt ();draiveris.manage (). taimauts (). implicitlyWait (2, TimeUnit.SECONDS);int izmērs = draiveris.findElements (By.tagName ("iframe")). izmērs ();System.out.println ("Kopējie kadri -" + izmērs);// izdrukā kopējo kadru skaitudriver.switchTo (). rāmis (0); // Ārējā rāmja pārslēgšanaSystem.out.println (draiveris.findElement (By.xpath ("ārējā elementa xpath")). GetText ());
- Pārslēdzieties uz ārējo rāmi.
- Izdrukā tekstu uz ārējā rāmja.
Kad mēs pārslēdzamies uz ārējo rāmi, mums vajadzētu zināt, vai ārējā rāmja iekšpusē ir kāds iekšējais rāmis
2. solis)
size = draiveris.findElements (By.tagName ("iframe")). size ();// izdrukā kopējo kadru skaitu ārējā rāmīSystem.out.println ("Kopējie kadri -" + izmērs);
- Atrod kopējo iframe skaitu ārējā rāmī.
- Ja izmērs tika atrasts “0”, rāmja iekšpusē nav iekšējā rāmja.
driver.switchTo (). rāmis (0); // Pārslēgšanās uz iekšējo kadruSystem.out.println (draiveris.findElement (By.xpath ("iekšējā elementa xpath")). GetText ());
- Pārslēdzieties uz iekšējo rāmi
- Izdrukā tekstu uz iekšējā rāmja.
public class FramesInsideFrames {public static void main (String [] args) {WebDriver draiveris = jauns FirefoxDriver ();draiveris.get ("Url");draiveris.pārvaldīt (). logs (). maksimizēt ();draiveris.manage (). taimauts (). implicitlyWait (2, TimeUnit.SECONDS);int izmērs = draiveris.findElements (By.tagName ("iframe")). izmērs ();System.out.println ("Kopējie kadri -" + izmērs);// izdrukā kopējo kadru skaitudriver.switchTo (). rāmis (0); // Ārējā rāmja pārslēgšanaSystem.out.println (draiveris.findElement (By.xpath ("ārējā elementa xpath")). GetText ());// Teksta drukāšana ārējā rāmīsize = draiveris.findElements (By.tagName ("iframe")). size ();// izdrukā kopējo kadru skaitu ārējā rāmīSystem.out.println ("Kopējie kadri -" + izmērs);driver.switchTo (). rāmis (0); // Pārslēgšanās uz iekšējo kadruSystem.out.println (draiveris.findElement (By.xpath ("iekšējā elementa xpath")). GetText ());// Teksta drukāšana iekšējā rāmīdriver.switchTo (). defaultContent ();}}Izeja : Iepriekš minētā koda izvade izdrukās tekstu iekšējā rāmī un ārējā rāmī.