handling iframes using selenium webdriver switchto method
visual studio için github uzantısı nasıl kullanılır
Selenium WebDriver Kullanarak iFrame'leri Kullanma: Pratik Örneklerle Uygulamalı Eğitim
iFrame (satır içi çerçeve), başka bir HTML belgesine gömülü bir HTML belgesidir.
iFrame'ler en yaygın olarak bir web sayfası içindeki reklamları görüntülemek için kullanılır. iFrames, HTML etiketi kullanılarak HTML belgesinde açıkça belirtilir
Bu eğitim, kolay anlamanız için ilgili kod örnekleriyle birlikte Selenium'da iframe'leri işleme hakkında size her şeyi açıklayacaktır.
=> Kolay Selenyum Eğitim Serisini Okuyun.
Ne öğreneceksin:
- Selenium Kullanarak iFrame'leri Kullanma
- Mart 2020'de GÜNCELLEME
- Sonuç
Selenium Kullanarak iFrame'leri Kullanma
Aşağıda gösterildiği gibi sağ tıklama seçeneklerinde 'Bu çerçeve' adlı seçenek görüntülenirse, bir web sayfasındaki bir iç çerçeve Firefox tarayıcısında tanımlanabilir.
Alternatif olarak, kaynak koduna bakarak ve etiketi arayarak bir web sayfasında iframe olup olmadığını da doğrulayabiliriz.
List iframes = driver.findElements(By.tagName(“iframe”));
İFrame'leri Kullanmak için Selenium Tarafından Sağlanan Yöntemler
Selenium, iframe'lerden ileri geri geçiş yapmak için aşağıdaki yerleşik yöntemleri sağlar.
- switchTo.frame (int frameNumber)
- switchTo.frame (string frameName)
- switchTo.frame (WebElement frameElement)
- switchTo (). defaultContent ()
# 1) switchTo.frame (int frameNumber)
- Bu yöntem, kullanıcıların çerçeve kimliğini kullanarak belirli bir çerçeveye geçmesine olanak tanır.
- Çerçeve numarası, sıfır tabanlı bir indeks değeridir, bu, web sayfasının ilk çerçevesinin 0 indisine sahip olduğu, ikinci çerçevenin 1 indisine sahip olduğu ve üçüncü çerçevenin 3 indeksine sahip olduğu anlamına gelir.
- Çerçeve numarası, elemanın Çerçeve Kimliği kullanılarak da tanımlanabilir. Bu şu şekilde yapılabilir Sağ tıklayın -> Öğeyi inceleyin ve iFrame'i arayın. İFrame'lerden herhangi birinin bir kimlik özniteliği olup olmadığını doğrulayın.
Kaynak koddaki örnek iframe öğesi aşağıda belirtildiği gibi görünecektir.
İFrame kimliği belirlendikten sonra, aşağıdaki gibi çerçeveye geçmek için aynısını kullanabiliriz.
Örnekler:
driver.switchTo.frame ('a077aa5e');
driver.switchTo.frame (0);
- Bu yöntem, gerekli çerçeve geçerli web sayfasında bulunmadığında NoSuchFrameException oluşturur.
# 2) switchTo.frame (string frameName)
- Bu yöntem, kullanıcıların çerçevenin geliştirici tarafından tanımlanan adını kullanarak belirli bir çerçeveye geçmesine olanak tanır.
- Bir String parametresi olarak kabul edilebilmesi için çerçeve adının çift tırnak içine alınması gerekir.
- Bu yöntem, gerekli çerçeve geçerli web sayfasında bulunmadığında NoSuchFrameException oluşturur.
Misal:
Yukarıda bahsedilen kodda, hem çerçeve kimliği hem de çerçeve adı aynı değeri taşır. Çerçeveye geçiş, aşağıdaki gibi çerçeve adı kullanılarak gerçekleştirilebilir:
driver.switchTo.frame ('a077aa5e');
# 3) switchTo.frame (WebElement frameElement)
- Bu yöntem, kullanıcıların Web Öğesinin konumuna göre bir çerçeveye geçmesine olanak tanır.
- Bu yöntem, gerekli çerçeve web sayfasında bulunmadığında NoSuchFrameException ve web sayfasında görüntülenen çerçeve etkin değilse StaleElementReferenceException oluşturur.
Misal:
WebElement frameElement = driver.findElement (By.id (“a077aa5e”));
driver.switchTo.frame (frameElement);
# 4) switchTo (). DefaultContent ()
- İframe'ler ve üst sayfa arasında ileri ve geri geçiş, driver.switchTo (). DefaultContent () yöntemi kullanılarak gerçekleştirilebilir.
- Selenium'da driver.switchTo (). ParentFrame () yöntemi adlı çerçeveler arasında geçiş yapmak için benzer bir yöntem olduğunu lütfen unutmayın.
- Driver.switchTo (). DefaultContent () ve driver.switchTo (). ParentFrame () arasındaki fark, ilk yöntemin, web sayfasındaki kare sayısından bağımsız olarak kontrolü ana web sayfasına geçirmesidir, ikinci yöntem ise denetimi geçerli çerçevenin üst çerçevesine değiştirir.
Misal:
Ana web sayfası p1 içinde i1, i2 ve i3 adında üç çerçeve olduğunu varsayalım. İ1, i2 ve i3 çerçeveleri birbirine bağımlıdır, bu da bir çerçevenin diğerinin ebeveyni olacağı anlamına gelir.
İ3 karesinde driver.switchTo (). DefaultContent () yöntemini kullanarak, web sürücüsü kontrolü ana sayfaya, p1'e taşınır. İ3 çerçevesindeki driver.switchTo (). ParentFrame () yöntemi, kontrolü tekrar i2 çerçevesine geçirir ve bu böyle devam eder.
Kaynak kodu örneği:
Selenyumda iframe'ler kullanılarak otomatikleştirilecek test senaryosu aşağıdadır:
- SoftwareTestingHelp.com web sitesini açın.
- İframe etiketine sahip tüm HTML öğelerini bulun, iFrame'in oluşum sayısını sayın ve bir konsolda yazdırın.
- Çerçeve kimliğini kullanarak web sayfasında geçerli bir çerçeveye geçin ve çerçevenin kaynak kodunu yazdırın.
- Mevcut tarayıcı penceresini kapatın.
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(); } }
Kod Çıkışı:
Web sitesini açın: https://www.softwaretestinghelp.com
Aswift_0 adlı çerçeveye geçin.
Tutulma konsolu penceresindeki web sayfasındaki iç çerçeve sayısını yazdırın.
Çerçeveye geçtikten sonra tutulma konsolundaki çerçevenin kaynak kodunu yazdırın.
Kod Açıklaması:
- Yerel makinedeki geckodriver.exe dosya yolunu işaret etmek için System.setProperty yöntemini kullanarak gecko sürücüsünün bir nesnesini başlatıyoruz.
- Daha sonra, WebDriver arayüzü aracılığıyla bir FireFox sürücüsü nesnesi başlatıyoruz.
- Firefox sürücü nesnesini kullanarak, aşağıdaki web sayfası: https://www.softwaretestinghelp.com açılır.
- Bir sonraki adımda, web sayfasında görüntülenen iframe öğelerinin sayısını belirleyip, bunları sayıyor ve iframe sayısını tutulma konsolunda görüntülüyoruz.
- Çerçeve kimliğini kullanarak web sayfasındaki çerçeveye geçiyoruz. Yukarıdaki durumda, çerçeve kimliği 'aswift_0' dır.
- Çerçeveye başarılı bir şekilde geçiş yaptıktan sonra, çerçevenin kaynak kodunu tutulma konsoluna yazdırıyoruz.
- Daha sonra driver.switchTo (). DefaultContent () ifadesini kullanarak ana web sayfasına geri dönüyoruz ve son olarak driver.quit yöntemini kullanarak web sürücüsü örneğini kapatıyoruz.
Selenium'da Frame ve iFrame arasındaki fark
- Bir çerçeve, bir sayfayı her bölümde yeni içerikle birden çok bölüme ayırmak için kullanılır.
- Bir iFrame, siteler arası komut dosyası oluşturma sorunlarını önlemek için harici web sitelerinin içeriğini web sayfasına gömmek için kullanılır.
- İFrame, geliştiricilerin üçüncü taraf web sitelerinden içerik yerleştirmesine olanak tanıdığından, bir iFrame çerçeveden daha az güvenli olarak kabul edilir. Bu nedenle, bir iframe, geliştiricinin iframe'e katıştırdığı içeriğe güvenmesini gerektirir.
- Bugün geliştirilmekte olan web uygulamalarının çoğu sayfayı bölmek için çerçeveler kullanmazlar, bunun yerine reklamlar gibi harici içeriği web sayfasına gömmek için iç çerçeveler kullanırlar.
Selenium'da Dinamik Çerçeveleri Kullanma
- Bazı web sayfalarında, çerçeve kimliği ve çerçeve adı gibi çerçeve özellikleri bir web sayfasında dinamik olarak değişebilir, ancak çerçeve konumu aynı kalacaktır. Böyle bir durumda, bir çerçeveyi benzersiz şekilde tanımlamak için çerçeve kimliğine veya çerçeve adına güvenemeyiz.
- Kullanabiliriz çerçeve dizini böyle bir durumda çerçeveyi çerçeve konumuna göre benzersiz şekilde tanımlamak için.
- Bazı durumlarda, çerçeve kimliği değeri sayfa her yüklendiğinde, ancak değişmeyen statik bir metinle değişir. Örneğin , iframe'ler için aşağıdaki kodu göz önünde bulundurun.
Yukarıdaki örnekte, 'çerçeve_' metni her sayfa yüklemede sayısal değer değişirken sabit kalır.
- Yukarıdaki çerçeveyi aşağıdakileri kullanarak benzersiz bir şekilde tanımlayabiliriz XPath
// iframe (içerir (@ id, ’çerçeve’))
Mart 2020'de GÜNCELLEME
Çerçeve İçindeki Elemanları Bulma
Selenium'da, çerçevenin içinde bulunan öğelere erişmek için önce çerçevenin içine geçmemiz ve ardından öğeleri normalde farklı Selenium konumlandırıcıları kullanarak yaptığımız gibi tanımlamamız gerekir. Selenium kodunuz, IFrame'e geçmeden öğelerinizi bulamaz.
Aşağıdaki ekran görüntüsü, çerçevelerin bir HTML koduna nasıl yerleştirildiğini gösterir:
Selenyum Kullanarak Bir IFrame'e Geçmenin Farklı Yolları
# 1) Çerçeve adını veya kimliğini kullanma
Çerçeve adını veya Çerçeve kimliğini kullanarak IFrame'e geçin, bazen bir kodda Çerçeve adı veya kimliği veya her ikisi de bulunur.
Sözdizimi:
driver.switchTo().frame(1); // for id driver.switchTo().frame('main'); // for name
# 2) Çerçeve Dizini Kullanma
Varsa çerçeve dizinini kullanarak çerçeveyi bulun.
Sözdizimi:
driver.switchTo().frame(0); // frame index starts with 0
# 3) Web Öğesini Kullanma
Selenium bulucuları kullanarak çerçeveyi bulun .
Sözdizimi:
driver.switchTo().frame('Locate the frame using xpath or by any other locator');
Çerçeve Kullanılarak Yapılan Diğer İşlemler
# 1) Ana veya Atasal Çerçeveye Geri Dönme
'SwitchTo.parentFrame' komutunu kullanarak kare 3'ten kare 2'ye geri dönme .
Sözdizimi:
driver.switchTo().parentFrame();
# 2) Başka Bir Çerçeveye Geçiş
Çerçeve 3'ten kare 1'e veya varsayılan çerçeveye geçmek istiyorsanız, “switchTo.defaultContent” komutunu kullanın.
Sözdizimi:
driver.switchTo().defaultContent();
Aşağıdaki kodda, bir çerçevenin içinde bulunan bir ad metin kutusu buluyoruz.
Ya çerçeveye geçmeden onu doğrudan bulmaya çalışırsak?
Sonucu görelim:
Kod, 'Öğe bulunamıyor: {' yöntem ':' xpath ',' selector ':' // input (@ name = ’name’) '} nedeniyle başarısız oldu
Şimdi Web Elementini kullanarak çerçevenin içine geçin veya Selenium bulucuyu kullanarak diyelim ve metin kutusu alanını bulun.
Aşağıda, Çerçeve İçinde Geçiş Yapmak İçin Tam Kod verilmiştir:
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'); } }
Çıktı:
Selenium kullanarak öğeleri bulmak için çerçeveler arasında bu şekilde geçiş yapmamız gerekiyor. Web sayfanızda birden fazla çerçeve varsa, birden çok kez geçiş yapmanız gerekir.
Sonuç
- iFrame, başka bir HTML belgesine gömülü bir HTML belgesidir. iFrame'ler, HTML belgesinde HTML etiketi kullanılarak açıkça belirtilmiştir
- switchTo.frame (int frameNumber) yöntemi, kullanıcıların çerçeve kimliğini kullanarak belirli bir çerçeveye geçmesine olanak tanır.
- switchTo.frame (string frameName) yöntemi, kullanıcıların çerçevenin geliştirici tarafından tanımlanan adını kullanarak belirli bir çerçeveye geçmesine olanak tanır.
- switchTo.frame (WebElement frameElement) yöntemi, kullanıcıların Web Öğesinin konumuna göre bir çerçeveye geçmesine olanak tanır.
=> TÜM Selenium Öğreticilerini Buradan Kontrol Edin.
Önerilen Kaynaklar
- Salatalık Selenium Eğitimi: Salatalık Java Selenium WebDriver Entegrasyonu
- Selenium WebDriver'a Giriş - Selenium Eğitimi # 8
- İlk WebDriver Komut Dosyamızın Uygulanması - Selenium WebDriver Eğitimi # 10
- Selenyum SSS
- Selenium WebDriver'da Uyarılar / Açılır Pencereler Nasıl İşlenir - Selenium Eğitimi # 16
- Selenium Komut Dosyasında Web Tablolarını, Çerçeveleri ve Dinamik Öğeleri Kullanma - Selenium Eğitimi # 18
- Selenium WebDriver'da Örtülü ve Açık Bekleme (Selenium Bekleme Türleri)
- Selenium WebDriver'da Kapsam Raporları Oluşturma Kılavuzu