IFrame-kehysten käsitteleminen Selenium Webdriverissa: switchTo ()

Sisällysluettelo:

Anonim

iFrame Selenium Webdriver -sovelluksessa

iFrame in Selenium Webdriver on verkkosivu tai upotettu kehys, joka on upotettu toiselle verkkosivulle, tai HTML-asiakirja, joka on upotettu toisen HTML-asiakirjan sisään. Iframe-kehystä käytetään usein lisäämään sisältöä muista lähteistä, kuten mainoksesta, verkkosivulle. Iframe on määritelty tagilla < iframe >.

Tässä opetusohjelmassa opit -

  1. Kuinka tunnistaa iframe:
  2. Kuinka vaihdat iframe-kehysten elementit Web-ohjaimen komentojen avulla:
  3. Sisäkkäisten kehysten (kehysten sisällä olevat kehykset) käsite:

Kuinka tunnistaa iframe:

Emme voi tunnistaa kehyksiä vain näkemällä sivun tai tarkastelemalla Firebugia.

Huomioi alla oleva kuva. Näytettävä mainos on Iframe-kehys, emme löydä sitä tai tunnista sitä vain tarkastamalla Firebugin avulla. Joten kysymys on, kuinka voit tunnistaa iframe-kehyksen?

Kuinka tunnistaa iframe Selenium WebDriver -ohjelmalla

Voimme tunnistaa seleenikehykset alla annetuilla menetelmillä:

  • Napsauta hiiren kakkospainikkeella elementtiä. Jos löydät vaihtoehdon, kuten 'Tämä kehys', se on iframe. (Katso yllä oleva kaavio)
  • Napsauta hiiren kakkospainikkeella sivua ja napsauta Näytä sivun lähde -vaihtoehtoa ja etsi iframe-kehyksellä, jos löydät minkä tahansa tagin nimen iframe-kehyksellä, tarkoittaa, että sanotaan iframe-kehyksestä koostuva sivu.

Yllä olevasta kaaviosta näet, että Tämä kehys -vaihtoehto on käytettävissä napsauttamalla hiiren kakkospainiketta, joten olemme nyt varmoja, että se on iframe- kehys .

Voimme jopa tunnistaa iframe-kehysten kokonaismäärän käyttämällä alla olevaa katkelmaa.

Int-koko = driver.findElements (By.tagName ("iframe")). Size ();

Kuinka vaihtaa iframe-kehysten elementit Web-ohjainkomennoilla:

Pohjimmiltaan voimme vaihtaa elementit ja käsitellä kehyksiä Seleniumissa kolmella tavalla.

  • Hakemiston mukaan
  • Nimen tai tunnuksen mukaan
  • Tekijä Web Element

Vaihda kehykseen hakemiston mukaan:

Hakemisto on yksi Seleniumin kehysten käsittelyn ominaisuuksista, jonka kautta voimme siirtyä siihen.

Iframe-kehyksen indeksi alkaa '0'.

Oletetaan, että jos sivulla on 100 kehystä, voimme siirtyä selenium-kehykseen indeksin avulla.

  • driver.switchTo (). kehys (0);
  • driver.switchTo (). kehys (1);

Vaihda kehykseen nimen tai tunnuksen mukaan:

Nimi ja ID ovat seleniumin kehysten käsittelyn attribuutteja, joiden kautta voimme siirtyä iframe-kehykseen.

  • driver.switchTo (). kehys ("iframe1");
  • driver.switchTo (). frame ("elementin tunnus");

Esimerkki siirtymisestä iframe-kehykseen tunnuksen kautta:

Otetaan esimerkki kehyksen vaihtamiseksi Seleniumissa, joka näkyy alla olevassa kuvassa. Vaatimuksemme on napsauttaa iframe-kehystä.

Pääset tähän iframe-kehykseen tämän URL-osoitteen kautta: http: //demo.guru99.com/test/guru99home/

On mahdotonta napsauttaa iframe-kehystä suoraan XPathin kautta, koska se on iframe-kehys. Ensin meidän on vaihdettava kehykseen ja sitten voimme napsauttaa xpathia.

Vaihe 1)

WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");ohjain.hallinta (). ikkuna (). maksimoi ();
  • Alustamme Firefox-ohjaimen.
  • Siirry "guru99" -sivustolle, joka koostuu iframe-kehyksestä.
  • Maksimoi ikkunan.

Vaihe 2)

driver.switchTo (). kehys ("a077aa5e");
  • Tässä vaiheessa meidän on selvitettävä iframe-kehyksen tunnus tarkastamalla Firebugin kautta.
  • Vaihda sitten iframe-kehykseen ID: n kautta.

Vaihe 3)

driver.findElement (By.xpath ("html / body / a / img")). napsauta ();
  • Tässä meidän on selvitettävä napsautettavan elementin xpath.
  • Napsauta elementtiä yllä esitetyllä web-ohjainkomennolla.

Tässä on täydellinen koodi:

julkinen luokka SwitchToFrame_ID {public staattinen void main (String [] argumentoi) {WebDriver-ohjain = uusi FirefoxDriver (); // navigoi selaimeendriver.get ("http://demo.guru99.com/test/guru99home/");// navigoi sivulle, joka koostuu iframe-kehyksestäohjain.hallinta (). ikkuna (). maksimoi ();driver.switchTo (). kehys ("a077aa5e"); // kehyksen vaihtaminen tunnuksellaSystem.out.println ("******** Olemme siirtymässä iframe-kehykseen *******");driver.findElement (By.xpath ("html / body / a / img")). napsauta ();// Napsauttaa iframe-kehystäSystem.out.println ("********* Olemme valmiit ***************");}}

Tuotos:

Selain siirtyy sivulle, joka koostuu yllä olevasta iframe-kehyksestä, ja napsauttaa iframe-kehystä.

Vaihda kehykseen Web Elementin avulla:

Voimme jopa siirtyä iframe-kehykseen web-elementin avulla.

  • driver.switchTo (). -kehys (WebElement);

Kuinka palata takaisin pääkehykseen

Meidän on päästävä ulos iframe-kehyksestä.

Voit siirtyä takaisin vanhempaan kehykseen käyttämällä joko switchTo (). ParentFrame () tai jos haluat palata pääkehykseen (tai useimpaan vanhempaan), voit käyttää switchTo (). DefaultContent ();

driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();

Kuinka vaihtaa kehys, jos emme voi vaihtaa ID: n tai Web Elementin avulla:

Oletetaan, että jos sivulla on 100 kehystä eikä tunnusta ole käytettävissä, tässä tapauksessa emme vain tiedä, mistä iframe-vaadittavasta elementistä ladataan (Näin on silloin, kun emme tiedä kehyksen hakemistoa myös).

Ratkaisu yllä olevaan huolenaiheeseen on, että meidän on löydettävä iframe-kehys, jonka kautta elementti ladataan, ja sitten meidän on vaihdettava iframe-kehykseen indeksin kautta.

Alla on vaiheet, joiden avulla löydetään kehyksen hakemisto, johon elementti ladataan, käyttämällä alla olevaa katkelmaa

Vaihe 1)

WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");ohjain.hallinta (). ikkuna (). maksimoi ();
  • Alusta Firefox-ohjain.
  • Siirry "guru99" -sivustolle, joka koostuu iframe-kehyksestä.
  • Maksimoi ikkunan.

Vaihe 2)

int size = driver.findElements (By.tagName ("iframe")). size ();
  • Yllä oleva koodi löytää sivun sisällä olevien iframe-kehysten kokonaismäärän käyttämällä taginimeä 'iframe'.

Vaihe 3)

Tämän vaiheen tavoitteena olisi selvittää iframe-kehys.

for (int i = 0; i <= koko; i ++) {driver.switchTo (). kehys (i);int yhteensä = driver.findElements (By.xpath ("html / body / a / img")). koko ();System.out.println (yhteensä);driver.switchTo (). defaultContent ();}

"Forloop" -kohdan yläpuolella iteroi kaikki sivun iframe-kehykset ja se tulostaa "1", jos vaadittu iframe-kehyksemme löydettiin, muu palauttaa arvon "0".

Tässä on täydellinen koodi vaiheeseen 3 asti:

public class IndexOfIframe {public staattinen void main (String [] argumentoi) {WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");ohjain.hallinta (). ikkuna (). maksimoi ();//ohjain.hallinta().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();for (int i = 0; i <= koko; i ++) {driver.switchTo (). kehys (i);int yhteensä = driver.findElements (By.xpath ("html / body / a / img")). koko ();System.out.println (yhteensä);driver.switchTo (). defaultContent ();}}}

Suorita tämä ohjelma ja tulos olisi kuten alla:

Tuotos:

100000
Tarkista lähtö, löydät 0- ja 1-sarjan.
  • Mistä löydät '1' lähdössä, joka on kehyksen hakemisto, johon elementti ladataan.
  • Koska indeksi iframe alkaa '0' jos löydät 1 1 s paikka, niin indeksi on 0.
  • Jos löydät 1 3 rd paikallaan, indeksi on 2.
Voimme kommentoida for-silmukkaa, kun olemme löytäneet hakemiston. Vaihe 4)
driver.switchTo (). kehys (0); 
  • Kun löydät elementin hakemiston, voit vaihtaa kehyksen yllä olevalla komennolla.
  • driver.switchTo (). -kehys (hakemisto löytyy vaiheesta 3);
Vaihe 5)
driver.findElement (By.xpath ("html / body / a / img")). napsauta ();
  • Yllä oleva koodi napsauttaa iframe-kehystä tai elementtiä iframe-kehyksessä.
Joten täydellinen koodi olisi kuin alla:
julkinen luokka SwitchToframe {public static void main (String [] argumentit) heittää NoSuchElementException {WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");ohjain.hallinta (). ikkuna (). maksimoi ();// int size = driver.findElements (By.tagName ("iframe")). size ();/ * (int i = 0; i <= koko; i ++) {driver.switchTo (). kehys (i);int yhteensä = driver.findElements (By.xpath ("html / body / a / img")). koko ();System.out.println (yhteensä);driver.switchTo (). defaultContent (); // siirtyminen takaisin iframe-kehyksestä} * /// Kommentoi koodia elementin indeksin löytämiseksidriver.switchTo (). kehys (0); // Siirtyminen kehykseenSystem.out.println ("******** Olemme siirtyneet iframe-kehykseen *******");driver.findElement (By.xpath ("html / body / a / img")). napsauta ();// Elementin napsauttaminen Mainoksen mukaisestiSystem.out.println ("********* Olemme valmiit ***************");}}
Tulos: Selain siirtyy sivulle, joka koostuu yllä olevasta iframe-kehyksestä, ja napsauttaa iframe-kehystä.

Sisäkkäisten kehysten (kehysten sisällä olevat kehykset) käsite:

Oletetaan, että on olemassa kaksi kehystä toistensa sisällä, kuten alla olevassa kuvassa on esitetty, ja vaatimus on tulostaa teksti ulkokehykseen ja sisäkehykseen. Sisäkkäisten kehysten tapauksessa
  • Aluksi meidän on vaihdettava ulkokehykseen joko indeksillä tai iframe-kehyksen tunnuksella
  • Kun olemme siirtyneet ulkokehykseen, voimme löytää iframe-kehysten kokonaismäärän ulkokehyksen sisällä ja
  • Voimme siirtyä sisäkehykseen millä tahansa tunnetulla menetelmällä.
Poistuessamme kehyksestä, meidän on poistuttava samassa järjestyksessä kuin astumme siihen ensin sisäkehyksestä ja sitten ulkokehyksestä.
Sisäkkäiset iFrame-kehykset Selenium WebDriver -ohjelmassa

Yllä olevan sisäkkäisen kehyksen HTML-koodi on alla esitetty.

Yllä oleva HTML-koodi selittää selvästi iframe-tagin (korostettu vihreällä) toisessa iframe-tagissa, mikä osoittaa sisäkkäisten iframe-kehysten olemassaolon.

Alla on vaiheet siirtymiseen ulkokehykseen ja tekstin tulostamiseen ulkokehyksiin: Vaihe 1)

WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("URL");ohjain.hallinta (). ikkuna (). maksimoi ();kuljettaja.hallitse (). aikakatkaisut (). implisiittisesti Odota (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Kehykset yhteensä -" + koko);// tulostaa kehysten kokonaismäärändriver.switchTo (). kehys (0); // Ulkokehyksen vaihtaminenSystem.out.println (driver.findElement (By.xpath ("ulkoisen elementin xpath")). GetText ()); 
  • Vaihda ulkokehykseen.
  • Tulostaa tekstin ulkokehykseen.

Kun siirrymme ulkokehykseen, meidän tulisi tietää, onko ulkokehyksen sisällä mitään sisäkehystä

Vaihe 2)

size = ohjain.findElements (By.tagName ("iframe")). size ();// tulostaa kehysten kokonaismäärän ulkokehyksen sisälläSystem.out.println ("Kehykset yhteensä -" + koko);
  • Hakee iframe-kehysten kokonaismäärän ulkokehyksen sisällä.
  • Jos koon todettiin olevan 0, kehyksen sisällä ei ole sisäistä kehystä.
Vaihe 3)
driver.switchTo (). kehys (0); // Siirtyminen sisäkehykseenSystem.out.println (driver.findElement (By.xpath ("sisemmän elementin xpath")). GetText ());
  • Vaihda sisäkehykseen
  • Tulostaa tekstin sisäkehykseen.
Tässä on täydellinen koodi:
public class FramesInsideFrames {public staattinen void main (String [] argumentoi) {WebDriver-ohjain = uusi FirefoxDriver ();driver.get ("URL");ohjain.hallinta (). ikkuna (). maksimoi ();kuljettaja.hallitse (). aikakatkaisut (). implisiittisesti Odota (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Kehykset yhteensä -" + koko);// tulostaa kehysten kokonaismäärändriver.switchTo (). kehys (0); // Ulkokehyksen vaihtaminenSystem.out.println (driver.findElement (By.xpath ("ulkoisen elementin xpath")). GetText ());// Tekstin tulostaminen ulkokehykseensize = ohjain.findElements (By.tagName ("iframe")). size ();// tulostaa kehysten kokonaismäärän ulkokehyksen sisälläSystem.out.println ("Kehykset yhteensä -" + koko);driver.switchTo (). kehys (0); // Siirtyminen sisäkehykseenSystem.out.println (driver.findElement (By.xpath ("sisemmän elementin xpath")). GetText ());// Tekstin tulostaminen sisäkehykseendriver.switchTo (). defaultContent ();}}
Tulos : Yllä olevan koodin tulos tulosta tekstin sisä- ja ulkokehykseen.