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 -
- Kuinka tunnistaa iframe:
- Kuinka vaihdat iframe-kehysten elementit Web-ohjaimen komentojen avulla:
- 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?

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:
100000Tarkista 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.
driver.switchTo (). kehys (0);
- Kun löydät elementin hakemiston, voit vaihtaa kehyksen yllä olevalla komennolla.
- driver.switchTo (). -kehys (hakemisto löytyy vaiheesta 3);
driver.findElement (By.xpath ("html / body / a / img")). napsauta ();
- Yllä oleva koodi napsauttaa iframe-kehystä tai elementtiä iframe-kehyksessä.
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ä.

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ä.
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.
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.