Cara Mengendalikan iFrames di Selenium Webdriver: switchTo ()

Isi kandungan:

Anonim

iFrame di Selenium Webdriver

iFrame di Selenium Webdriver adalah laman web atau bingkai sebaris yang disematkan di laman web lain atau dokumen HTML yang disematkan di dalam dokumen HTML yang lain. Iframe sering digunakan untuk menambahkan kandungan dari sumber lain seperti iklan ke laman web. Iframe ditakrifkan dengan tag < iframe >.

Dalam tutorial ini, anda akan belajar -

  1. Cara mengenal pasti iframe:
  2. Bagaimana menukar elemen dalam iframe menggunakan arahan Pemandu Web:
  3. Konsep Bingkai Bersarang (Bingkai di dalam Bingkai):

Cara mengenal pasti iframe:

Kami tidak dapat mengesan bingkai dengan hanya melihat halaman atau dengan memeriksa Firebug.

Perhatikan gambar di bawah ini, Iklan yang dipaparkan adalah Iframe, kita tidak dapat mencari atau mengenalinya dengan hanya memeriksa menggunakan Firebug. Jadi persoalannya ialah bagaimana anda dapat mengenal pasti iframe?

Cara mengenal pasti iframe menggunakan Selenium WebDriver

Kami dapat mengenal pasti bingkai di Selenium menggunakan kaedah yang diberikan di bawah:

  • Klik kanan pada elemen, Sekiranya anda menjumpai pilihan seperti 'Bingkai Ini' maka itu adalah iframe. (Sila rujuk gambar rajah di atas)
  • Klik kanan pada halaman dan klik 'Lihat Sumber Halaman' dan Cari dengan 'iframe', jika anda dapat mencari nama tag dengan 'iframe' maka itu berarti mengatakan halaman yang terdiri dari iframe.

Dalam rajah di atas, anda dapat melihat bahawa pilihan ' Ini Bingkai ' tersedia setelah mengklik kanan, jadi kami sekarang yakin bahawa itu adalah iframe.

Kami bahkan dapat mengenal pasti jumlah iframe dengan menggunakan coretan di bawah.

Int size = driver.findElements (By.tagName ("iframe")). Saiz ();

Cara menukar elemen dalam iframe menggunakan arahan Pemandu Web:

Pada dasarnya, kita boleh menukar elemen dan mengendalikan bingkai di Selenium menggunakan 3 cara.

  • Mengikut Indeks
  • Mengikut Nama atau Id
  • Oleh Elemen Web

Tukar ke bingkai mengikut indeks:

Indeks adalah salah satu atribut untuk pengendalian bingkai di Selenium di mana kita dapat beralih kepadanya.

Indeks iframe bermula dengan '0'.

Andaikan jika ada 100 bingkai di halaman, kita dapat beralih ke bingkai di Selenium dengan menggunakan indeks.

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

Tukar ke bingkai dengan Nama atau ID:

Nama dan ID adalah atribut untuk menangani bingkai di Selenium di mana kita dapat beralih ke iframe.

  • driver.switchTo (). bingkai ("iframe1");
  • driver.switchTo (). bingkai ("id elemen");

Contoh Menukar ke iframe melalui ID:

Mari kita ambil contoh untuk menukar bingkai di Selenium yang dipaparkan pada gambar di bawah. Keperluan kami adalah mengklik iframe.

Kami boleh mengakses iframe ini melalui URL di bawah ini: http: //demo.guru99.com/test/guru99home/

Mustahil untuk mengklik iframe secara langsung melalui XPath kerana ia adalah iframe. Mula-mula kita harus beralih ke bingkai dan kemudian kita boleh mengklik menggunakan xpath.

Langkah 1)

Pemacu WebDriver = FirefoxDriver baru ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();
  • Kami memulakan pemacu Firefox.
  • Navigasi ke laman "guru99" yang terdiri daripada iframe.
  • Memaksimumkan tingkap.

Langkah 2)

driver.switchTo (). bingkai ("a077aa5e");
  • Dalam langkah ini, kita perlu mengetahui id iframe dengan memeriksa melalui Firebug.
  • Kemudian beralih ke iframe melalui ID.

Langkah 3)

driver.findElement (By.xpath ("html / body / a / img")). klik ();
  • Di sini kita perlu mengetahui xpath elemen yang akan diklik.
  • Klik elemen menggunakan arahan pemacu web yang ditunjukkan di atas.

Berikut adalah kod lengkap:

SwitchToFrame_ID kelas awam {utama kekosongan statik awam (String [] args) {Pemacu WebDriver = FirefoxDriver baru (); // menavigasi ke Penyemak Imbasdriver.get ("http://demo.guru99.com/test/guru99home/");// menavigasi ke halaman yang terdiri daripada iframedriver.manage (). window (). maksimalkan ();driver.switchTo (). bingkai ("a077aa5e"); // menukar bingkai dengan IDSystem.out.println ("******** Kami beralih ke iframe *******");driver.findElement (By.xpath ("html / body / a / img")). klik ();// Klik iframeSystem.out.println ("********* Kami selesai ***************");}}

Pengeluaran:

Penyemak imbas menavigasi ke halaman yang terdiri daripada iframe di atas dan mengklik iframe.

Tukar ke bingkai dengan Elemen Web:

Kita bahkan boleh beralih ke iframe menggunakan elemen web.

  • driver.switchTo (). bingkai (WebElement);

Cara menukar kembali ke Rangka Utama

Kita mesti keluar dari iframe.

Untuk kembali ke bingkai induk, anda boleh menggunakan switchTo (). ParentFrame () atau jika anda ingin kembali ke bingkai utama (atau kebanyakan ibu bapa), anda boleh menggunakan switchTo (). DefaultContent ();

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

Cara menukar bingkai, jika kita TIDAK BOLEH beralih menggunakan ID atau Elemen Web:

Anggaplah jika terdapat 100 bingkai di halaman, dan tidak ada ID yang tersedia, dalam hal ini, kita tidak tahu dari mana elemen iframe diperlukan dimuat (Ini berlaku apabila kita tidak mengetahui indeks bingkai juga).

Penyelesaian untuk masalah di atas adalah, kita mesti mencari indeks iframe di mana elemen dimuat dan kemudian kita perlu beralih ke iframe melalui indeks.

Berikut adalah langkah-langkah untuk mencari indeks Bingkai di mana elemen dimuat dengan menggunakan potongan di bawah

Langkah 1)

Pemacu WebDriver = FirefoxDriver baru ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();
  • Permulaan pemacu Firefox.
  • Navigasi ke laman "guru99" yang terdiri daripada iframe.
  • Memaksimumkan tingkap.

Langkah 2)

int size = driver.findElements (By.tagName ("iframe")). saiz ();
  • Kod di atas mendapati jumlah iframe yang terdapat di dalam halaman menggunakan nama tag 'iframe'.

Langkah 3)

Objektif untuk langkah ini adalah mencari indeks iframe.

untuk (int i = 0; i <= size; i ++) {driver.switchTo (). bingkai (i);int total = driver.findElements (By.xpath ("html / body / a / img")). saiz ();System.out.println (jumlah);driver.switchTo (). defaultContent ();}

Di atas "forloop" mengulangi semua iframe di halaman dan ia mencetak '1' jika iframe kami yang diperlukan dijumpai yang lain akan mengembalikan '0'.

Berikut adalah kod lengkap sehingga langkah 3:

kelas awam IndexOfIframe {utama kekosongan statik awam (String [] args) {Pemacu WebDriver = FirefoxDriver baru ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). saiz ();untuk (int i = 0; i <= size; i ++) {driver.switchTo (). bingkai (i);int total = driver.findElements (By.xpath ("html / body / a / img")). saiz ();System.out.println (jumlah);driver.switchTo (). defaultContent ();}}}

Jalankan program ini dan output seperti di bawah ini:

Pengeluaran:

100000
Sahkan keluaran, anda boleh menemui siri 0 dan 1.
  • Di mana sahaja anda menjumpai output '1' yang merupakan indeks Frame dengan elemen dimuat.
  • Sejak indeks iframe bermula dengan '0' jika anda mencari 1 dalam 1 yang st tempat, maka indeks adalah 0.
  • Jika anda mendapati 1 dalam 3 rd tempat, indeks adalah 2.
Kami dapat memberi komen untuk loop, setelah kami menemui indeks. Langkah 4)
driver.switchTo (). bingkai (0); 
  • Sebaik sahaja anda menemui indeks elemen, anda boleh menukar bingkai menggunakan perintah di atas.
  • driver.switchTo (). frame (indeks dijumpai dari Langkah 3);
Langkah 5)
driver.findElement (By.xpath ("html / body / a / img")). klik ();
  • Kod di atas akan mengklik iframe atau elemen dalam iframe.
Jadi kod lengkapnya seperti di bawah:
SwitchToframe kelas awam {utama kekosongan statik awam (String [] args) melemparkan NoSuchElementException {Pemacu WebDriver = FirefoxDriver baru ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();// int size = driver.findElements (By.tagName ("iframe")). saiz ();/ * untuk (int i = 0; i <= size; i ++) {driver.switchTo (). bingkai (i);int total = driver.findElements (By.xpath ("html / body / a / img")). saiz ();System.out.println (jumlah);driver.switchTo (). defaultContent (); // beralih kembali dari iframe} * /// Mengomentari kod untuk mencari indeks elemendriver.switchTo (). bingkai (0); // Beralih ke bingkaiSystem.out.println ("******** Kami beralih ke iframe *******");driver.findElement (By.xpath ("html / body / a / img")). klik ();// Mengklik elemen sesuai dengan IklanSystem.out.println ("********* Kami selesai ***************");}}
Keluaran: Penyemak imbas menavigasi ke halaman yang terdiri daripada iframe di atas dan mengklik iframe.

Konsep Bingkai Bersarang (Bingkai di dalam Bingkai):

Mari kita anggap bahawa terdapat dua bingkai satu di dalam yang lain seperti yang ditunjukkan dalam gambar di bawah dan keperluan kita adalah mencetak teks di bingkai luar dan bingkai dalam. Sekiranya bingkai bersarang,
  • Pada mulanya kita mesti beralih ke bingkai luar dengan Indeks atau ID iframe
  • Sebaik sahaja kita beralih ke bingkai luar, kita dapat mencari jumlah keseluruhan iframe di dalam bingkai luar, dan
  • Kita boleh beralih ke kerangka dalam dengan kaedah yang diketahui.
Semasa keluar dari bingkai, kita harus keluar dengan urutan yang sama seperti yang kita masukkan dari bingkai dalam terlebih dahulu dan kemudian bingkai luar.
IFrames bersarang di Selenium WebDriver

Kod Html untuk bingkai bersarang di atas adalah seperti gambar di bawah.

Kod HTML di atas menerangkan dengan jelas tag iframe (diserlahkan dengan warna hijau) dalam tag iframe yang lain, yang menunjukkan kehadiran iframe bersarang.

Berikut adalah langkah-langkah untuk beralih ke bingkai luar dan mencetak teks pada bingkai luar: Langkah 1)

Pemacu WebDriver = FirefoxDriver baru ();driver.get ("Url");driver.manage (). window (). maksimalkan ();driver.manage (). timeout (). secara implisitWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). saiz ();System.out.println ("Jumlah Bingkai -" + saiz);// mencetak jumlah bingkaidriver.switchTo (). bingkai (0); // Menukar Bingkai LuarSystem.out.println (driver.findElement (By.xpath ("xpath elemen luar")). GetText ()); 
  • Tukar ke Bingkai luar.
  • Mencetak teks pada bingkai luar.

Sebaik sahaja kita beralih ke bingkai luar, kita harus mengetahui apakah ada bingkai dalam yang terdapat di dalam bingkai luar

Langkah 2)

size = driver.findElements (By.tagName ("iframe")). saiz ();// mencetak jumlah bingkai di dalam bingkai luarSystem.out.println ("Jumlah Bingkai -" + saiz);
  • Mencari jumlah iframe di dalam bingkai luar.
  • Sekiranya ukuran dijumpai '0' maka tidak ada bingkai dalaman di dalam bingkai.
Langkah 3)
driver.switchTo (). bingkai (0); // Beralih ke kerangka dalamanSystem.out.println (driver.findElement (By.xpath ("xpath elemen dalaman")). GetText ());
  • Tukar ke bingkai dalaman
  • Mencetak teks pada bingkai dalam.
Berikut adalah kod lengkap:
kelas awam FramesInsideFrames {utama kekosongan statik awam (String [] args) {Pemacu WebDriver = FirefoxDriver baru ();driver.get ("Url");driver.manage (). window (). maksimalkan ();driver.manage (). timeout (). secara implisitWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). saiz ();System.out.println ("Jumlah Bingkai -" + saiz);// mencetak jumlah bingkaidriver.switchTo (). bingkai (0); // Menukar Bingkai LuarSystem.out.println (driver.findElement (By.xpath ("xpath elemen luar")). GetText ());// Mencetak teks dalam bingkai luarsize = driver.findElements (By.tagName ("iframe")). saiz ();// mencetak jumlah bingkai di dalam bingkai luarSystem.out.println ("Jumlah Bingkai -" + saiz);driver.switchTo (). bingkai (0); // Beralih ke kerangka dalamanSystem.out.println (driver.findElement (By.xpath ("xpath elemen dalaman")). GetText ());// Mencetak teks dalam bingkai dalamandriver.switchTo (). defaultContent ();}}
Keluaran : Keluaran dari kod di atas akan mencetak teks dalam bingkai Dalam dan bingkai Luar.