Selenium Webdriver'da iFrame
Selenium Webdriver'daki iFrame, başka bir web sayfasına veya başka bir HTML belgesinin içine gömülü bir HTML belgesine gömülü bir web sayfası veya satır içi çerçevedir. İç çerçeve genellikle bir web sayfasına reklam gibi diğer kaynaklardan içerik eklemek için kullanılır. İframe, < iframe > etiketiyle tanımlanır .
Bu eğitimde öğreneceksiniz -
- İframe nasıl belirlenir:
- Web Sürücüsü komutlarını kullanarak iframe'lerdeki öğeleri nasıl değiştirebilirsiniz:
- İç İçe Çerçeveler Kavramı (Çerçevelerin İçindeki Çerçeveler):
İframe nasıl belirlenir:
Sadece sayfayı görerek veya Firebug'ı inceleyerek çerçeveleri tespit edemiyoruz.
Aşağıdaki resme bakın, Görüntülenen Reklam bir Iframe'dir, bunu sadece Firebug kullanarak kontrol ederek bulamayız veya tanıyamayız. Öyleyse soru, iframe'i nasıl tanımlayabileceğinizdir?
Selenium'daki çerçeveleri aşağıda verilen yöntemleri kullanarak tanımlayabiliriz:
- Öğeye sağ tıklayın, 'Bu Çerçeve' gibi bir seçenek bulursanız, o bir iframe'dir. (Lütfen yukarıdaki şemaya bakın)
- Sayfayı sağ tıklayın ve "Sayfa Kaynağını Görüntüle" yi tıklayın ve "iframe" ile Ara'yı tıklayın, "iframe" ile herhangi bir etiket adı bulabilirseniz, bu, bir iframe içeren sayfayı söylemek anlamına gelir.
Yukarıdaki diyagramda, ' Bu Çerçeve ' seçeneğinin sağ tıklama ile kullanılabildiğini görebilirsiniz, bu yüzden artık bunun bir iç çerçeve olduğundan eminiz.
Aşağıdaki snippet'i kullanarak toplam iframe sayısını bile belirleyebiliriz.
Int size = driver.findElements (By.tagName ("iframe")). Size ();
Web Sürücüsü komutlarını kullanarak iframe'lerdeki öğeler arasında nasıl geçiş yapılır:
Temel olarak, öğeleri 3 yolla Selenium'da değiştirebilir ve çerçeveleri işleyebiliriz.
- Dizine Göre
- İsim veya Kimliğe Göre
- Web Elementine Göre
Dizine göre çerçeveye geçiş yapın:
İndeks, Selenium'daki çerçeve işleme için ona geçiş yapabileceğimiz niteliklerden biridir.
İframe dizini '0' ile başlar.
Varsayalım ki sayfada 100 çerçeve varsa, indeksi kullanarak Selenium'da çerçeveye geçebiliriz.
- driver.switchTo (). çerçeve (0);
- driver.switchTo (). çerçeve (1);
İsme veya Kimliğe göre çerçeveye geçiş yapın:
Ad ve kimlik, içinden iç çerçeveye geçebileceğimiz Selenium'daki çerçevelerin işlenmesine yönelik niteliklerdir.
- driver.switchTo (). çerçeve ("iframe1");
- driver.switchTo (). çerçeve ("öğenin kimliği");
Kimlik aracılığıyla iframe'e geçiş örneği:
Aşağıdaki resimde gösterilen Selenium'da çerçeve değiştirmek için bir örnek alalım. İhtiyacımız, iframe'e tıklamaktır.
Bu iframe'e aşağıdaki URL aracılığıyla erişebiliriz: http: //demo.guru99.com/test/guru99home/
Bir iframe olduğundan, iframe'i doğrudan XPath üzerinden tıklamak imkansızdır. Önce çerçeveye geçmeliyiz ve sonra xpath kullanarak tıklayabiliriz.
Aşama 1)
WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
- Firefox sürücüsünü başlatıyoruz.
- İframe'i içeren "guru99" sitesine gidin.
- Pencereyi büyüttü.
Adım 2)
driver.switchTo (). çerçeve ("a077aa5e");
- Bu adımda, Firebug üzerinden inceleyerek iframe kimliğini bulmamız gerekir.
- Ardından, kimlik aracılığıyla iframe'e geçin.
Aşama 3)
driver.findElement (By.xpath ("html / body / a / img")) tıklayın ();
- Burada tıklanacak elemanın xyolunu bulmamız gerekiyor.
- Yukarıda gösterilen web sürücüsü komutunu kullanarak öğeyi tıklayın.
İşte tam kod:
genel sınıf SwitchToFrame_ID {public static void main (String [] args) {WebDriver sürücüsü = yeni FirefoxDriver (); // Tarayıcıya giderdriver.get ("http://demo.guru99.com/test/guru99home/");// bir iframe içeren sayfaya giderdriver.manage (). window (). maximize ();driver.switchTo (). çerçeve ("a077aa5e"); // çerçeveyi kimliğe göre değiştirmeSystem.out.println ("******** ******* iframe'e geçiyoruz");driver.findElement (By.xpath ("html / body / a / img")) tıklayın ();// iframe'i tıklarSystem.out.println ("********* Bitirdik ***************");}}
Çıktı:
Tarayıcı, yukarıdaki iframe'i içeren sayfaya gider ve iframe'i tıklar.
Çerçeveye Web Öğesine göre geçiş yapın:
Web öğesini kullanarak iframe'e bile geçebiliriz.
- driver.switchTo (). çerçeve (WebElement);
Ana Çerçeveye nasıl geri dönülür
İframe'den çıkmalıyız.
Ana çerçeveye geri dönmek için switchTo (). ParentFrame () kullanabilir veya ana (veya çoğu ana) çerçeveye geri dönmek isterseniz switchTo (). DefaultContent ();
driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();
Kimlik veya Web Öğesi kullanarak geçiş YAPAMAZsak, çerçeve nasıl değiştirilir:
Sayfada 100 çerçeve varsa ve kullanılabilir bir kimlik yoksa, bu durumda, yalnızca hangi iframe gerekli öğesinin yüklendiğini bilmiyoruz (Bu, çerçevenin dizinini bilmediğimiz bir durumdur) Ayrıca).
Yukarıdaki endişenin çözümü, öğenin yüklendiği iframe indeksini bulmalı ve ardından indeks aracılığıyla iframe'e geçmemiz gerektiğidir.
Aşağıdaki kod parçacığı kullanılarak öğenin yüklendiği Çerçeve dizinini bulma adımları aşağıdadır.
Aşama 1)
WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();
- Firefox sürücüsünü başlatın.
- İframe'i içeren "guru99" sitesine gidin.
- Pencereyi büyüttü.
Adım 2)
int size = driver.findElements (By.tagName ("iframe")). size ();
- Yukarıdaki kod, etiket adı 'iframe'i kullanarak sayfada bulunan iframe'lerin toplam sayısını bulur.
Aşama 3)
Bu adımın amacı , iframe dizinini bulmaktır.
for (int i = 0; i <= size; i ++) {driver.switchTo (). çerçeve (i);int toplam = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (toplam);driver.switchTo (). defaultContent ();}
Yukarıdaki "forloop", sayfadaki tüm iframe'leri yineler ve gerekli iframe'imiz bulunursa '1' yazdırır, aksi takdirde '0' döndürür.
İşte 3. adıma kadar tam kod:
public class IndexOfIframe {public static void main (String [] args) {WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();for (int i = 0; i <= size; i ++) {driver.switchTo (). çerçeve (i);int toplam = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (toplam);driver.switchTo (). defaultContent ();}}}
Bu programı çalıştırın ve çıktı aşağıdaki gibi olacaktır:
Çıktı:
100000Çıkışı doğrulayın, 0 ve 1'lerin serilerini bulabilirsiniz.
- Çıktıda, elemanın yüklendiği Frame indeksi olan '1'i bulduğunuz her yerde.
- Eğer 1'de 1 bulursanız iframe endeksi '0' ile başlar beri st yerde, o zaman endeks 0'dır.
- 3. sırada 1'i bulursanız , dizin 2'dir.
driver.switchTo (). çerçeve (0);
- Elemanın indeksini bulduğunuzda, yukarıdaki komutu kullanarak çerçeve üzerinde geçiş yapabilirsiniz.
- driver.switchTo (). çerçeve (3. Adımda bulunan dizin);
driver.findElement (By.xpath ("html / body / a / img")) tıklayın ();
- Yukarıdaki kod, iframe'deki iframe veya öğeyi tıklar.
public class SwitchToframe {public static void main (String [] args) NoSuchElementException {WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// int size = driver.findElements (By.tagName ("iframe")). size ();/ * for (int i = 0; i <= size; i ++) {driver.switchTo (). çerçeve (i);int toplam = driver.findElements (By.xpath ("html / body / a / img")). size ();System.out.println (toplam);driver.switchTo (). defaultContent (); // iframe'den geri dönme} * /// Elemanın dizinini bulmak için kodu yorumladıdriver.switchTo (). çerçeve (0); // Çerçeveye geçiyoruzSystem.out.println ("******** ******* iframe'e geçtik");driver.findElement (By.xpath ("html / body / a / img")) tıklayın ();// Reklam ile uyumlu elemanın tıklanmasıSystem.out.println ("********* Bitirdik ***************");}}Çıktı: Tarayıcı, yukarıdaki iframe'i içeren sayfaya gider ve iframe'i tıklar.
İç İçe Çerçeveler Kavramı (Çerçevelerin İçindeki Çerçeveler):
Diyelim ki aşağıdaki resimde gösterildiği gibi iç içe iki çerçeve var ve bizim ihtiyacımız metni dış çerçeveye ve iç çerçeveye yazdırmaktır. İç içe çerçeveler olması durumunda,- İlk önce dış çerçeveye iç çerçevenin Dizini veya kimliğine göre geçmeliyiz.
- Dış çerçeveye geçtikten sonra, dış çerçevenin içindeki toplam iframe sayısını bulabiliriz ve
- Bilinen yöntemlerden herhangi biriyle iç çerçeveye geçebiliriz.
Yukarıdaki iç içe çerçeve için Html kodu aşağıda gösterildiği gibidir.
Yukarıdaki HTML kodu, başka bir iframe etiketi içindeki iframe etiketini (yeşille vurgulanmıştır) açıkça açıklayarak iç içe geçmiş iframe'lerin varlığını belirtir.
Dış çerçeveye geçme ve metni dış çerçevelere yazdırma adımları aşağıda verilmiştir: Adım 1)
WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maximize ();driver.manage (). timeout (). örtük olarakWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Toplam Çerçeveler -" + boyut);// toplam kare sayısını yazdırırdriver.switchTo (). çerçeve (0); // Dış Çerçevenin DeğiştirilmesiSystem.out.println (driver.findElement (By.xpath ("dış elemanın x yolu")). GetText ());
- Dış Çerçeveye geçin.
- Metni dış çerçeveye yazdırır.
Dış çerçeveye geçtikten sonra, dış çerçevenin içinde herhangi bir iç çerçeve olup olmadığını bilmemiz gerekir.
Adım 2)
size = driver.findElements (By.tagName ("iframe")). size ();// dış çerçeve içindeki toplam çerçeve sayısını yazdırırSystem.out.println ("Toplam Çerçeveler -" + boyut);
- Dış çerçeve içindeki toplam iframe sayısını bulur.
- Boyut '0' bulunursa, çerçevenin içinde iç çerçeve yoktur.
driver.switchTo (). çerçeve (0); // İç çerçeveye geçiliyorSystem.out.println (driver.findElement (By.xpath ("iç elemanın x yolu")). GetText ());
- İç çerçeveye geç
- Metni iç çerçeveye yazdırır.
public class FramesInsideFrames {public static void main (String [] args) {WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("Url");driver.manage (). window (). maximize ();driver.manage (). timeout (). örtük olarakWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). size ();System.out.println ("Toplam Çerçeveler -" + boyut);// toplam kare sayısını yazdırırdriver.switchTo (). çerçeve (0); // Dış Çerçevenin DeğiştirilmesiSystem.out.println (driver.findElement (By.xpath ("dış elemanın x yolu")). GetText ());// Metni dış çerçeveye yazdırmasize = driver.findElements (By.tagName ("iframe")). size ();// dış çerçeve içindeki toplam çerçeve sayısını yazdırırSystem.out.println ("Toplam Çerçeveler -" + boyut);driver.switchTo (). çerçeve (0); // İç çerçeveye geçiliyorSystem.out.println (driver.findElement (By.xpath ("iç elemanın x yolu")). GetText ());// Metni iç çerçeveye yazdırmakdriver.switchTo (). defaultContent ();}}Çıktı : Yukarıdaki kodun çıktısı metni İç çerçeve ve Dış çerçeveye yazdıracaktır.