Selenium WebDriver'da JavaScriptExecutor ve Örnek

İçindekiler:

Anonim

JavaScriptExecutor nedir?

JavaScriptExecutor, Selenium Webdriver aracılığıyla JavaScript çalıştırmaya yardımcı olan bir Arayüzdür. JavaScriptExecutor, javascript'i seçilen pencerede veya geçerli sayfada çalıştırmak için "executescript" ve "executeAsyncScript" adlı iki yöntem sağlar.

Bu eğitimde öğreneceksiniz -

  • JavaScriptExecutor nedir?
  • Neden JavaScriptExecutor'a ihtiyacımız var?
  • JavaScriptExecutor Yöntemleri
  • ExecuteAsyncScript örneği
    • Örnek 1: Test edilen tarayıcıda uyku gerçekleştirme.
  • ExecuteScript örneği
    • 1) Örnek: Oturum açmak ve Uyarı penceresi oluşturmak için bir düğmeyi tıklayın
    • 2) Örnek: Kazıma Verilerini Yakalayın ve farklı sayfalara gidin
    • 3) Örnek: Scroll Downusing

Neden JavaScriptExecutor'a ihtiyacımız var?

Selenium Webdriver'da, bir web sayfasındaki işlemleri tanımlamak ve gerçekleştirmek için XPath, CSS vb. Gibi konumlandırıcılar kullanılır.

Bu konumlandırıcıların çalışmaması durumunda JavaScriptExecutor'u kullanabilirsiniz. Bir web öğesinde istediğiniz işlemi gerçekleştirmek için JavaScriptExecutor'u kullanabilirsiniz.

Selenium, javaScriptExecutor'u destekler. Ekstra bir eklentiye veya eklentiye gerek yoktur. JavaScriptExecutor'u kullanmak için komut dosyasına ( org.openqa.selenium.JavascriptExecutor ) aktarmanız yeterlidir .

JavaScriptExecutor Yöntemleri

  1. executeAsyncScript

Eşzamansız komut dosyası ile sayfanız daha hızlı oluşturulur. Kullanıcıları, sayfa oluşturulmadan önce bir komut dosyasının indirilmesini beklemeye zorlamak yerine. Bu işlev, Selenium'da seçili olan çerçeve veya pencere bağlamında eşzamansız bir JavaScript parçasını çalıştırır. Bu şekilde yürütülen JS, eşzamanlı olarak çalışan çeşitli bir geri arama işlevi ile tek iş parçacıklıdır.

  1. executeScript

Bu yöntem JavaScript'i Selenium'da seçili olan çerçeve veya pencere bağlamında yürütür. Bu yöntemde kullanılan komut dosyası, anonim bir işlevin (adsız bir işlev) gövdesinde çalışır. Ayrıca ona karmaşık argümanlar da iletebiliriz.

Komut dosyası değerleri döndürebilir. Döndürülen veri türleri

  • Boole
  • Uzun
  • Dize
  • Liste
  • WebElement.

JavascriptExecutor için temel sözdizimi aşağıda verilmiştir:

Sözdizimi:

JavascriptExecutor js = (JavascriptExecutor) sürücüsü;js.executeScript (Komut Dosyası, Bağımsız Değişkenler);
  • Komut Dosyası - Bu, yürütülmesi gereken JavaScript'tir.
  • Argümanlar - Betiğin argümanlarıdır. Opsiyoneldir.

ExecuteAsyncScript örneği

ExecuteAsyncScript'i kullanmak, testinizin performansını iyileştirmeye yardımcı olur. Daha çok normal bir kodlama gibi test yazmaya izin verir.

ExecSync, Selenium tarayıcısı tarafından gerçekleştirilen diğer eylemleri engeller ancak execAsync eylemi engellemez. Komut dosyası tamamlandığında sunucu tarafındaki Test paketine bir geri arama gönderecektir. Bu, komut dosyası içindeki her şeyin sunucu tarafından değil tarayıcı tarafından yürütüleceği anlamına gelir.

Örnek 1: Test edilen tarayıcıda uyku gerçekleştirme.

Bu senaryoda, executeAsyncScript'i göstermek için "Guru99" demo sitesini kullanacağız. Bu örnekte

  • Tarayıcıyı başlatın.
  • "Http://demo.guru99.com/V4/" sitesini açın.
  • Uygulama, başka bir işlem yapmak için 5 saniye bekler.

Adım 1) executeAsyncScript () yöntemini kullanarak 5 saniye (5000 milisaniye) beklemeden önce başlangıç ​​zamanını yakalayın.

Adım 2) Ardından, 5 saniye beklemek için executeAsyncScript () kullanın.

Adım 3) Ardından, geçerli saati alın.

Adım 4) Çıkarın (şimdiki zaman - başlangıç ​​zamanı) = geçen süre.

Adım 5) 5000 milisaniyeden fazla görüntülemesi gereken çıktıyı doğrulayın

içe aktar java.util.concurrent.TimeUnit;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Ölçekpublic void Giriş (){WebDriver sürücüsü = yeni FirefoxDriver ();// JavascriptExecutor arayüz nesnesini Type çevrimiyle oluşturmaJavascriptExecutor js = (JavascriptExecutor) sürücüsü;// Siteyi Başlatma.driver.get ("http://demo.guru99.com/V4/");// Pencereyi büyütdriver.manage (). window (). maximize ();// Komut Dosyası Zaman Aşımını 20 saniyeye ayarlayındriver.manage (). timeout (). setScriptTimeout (20, TimeUnit.SECONDS);// Başlangıç ​​zamanını bildirin ve ayarlayınlong start_time = System.currentTimeMillis ();// 5 saniye beklemek için executeAsyncScript () yöntemini çağırınjs.executeAsyncScript ("window.setTimeout (argümanlar [arguments.length - 1], 5000);");// Zamanların farkını (currentTime - startTime) alın.System.out.println ("Geçen zaman: + (System.currentTimeMillis () - başlangıç_süresi));}}

Çıktı: Aşağıda gösterildiği gibi, 5 saniyeden fazla (5000 milisaniye) geçen süre başarıyla görüntülendi:

[TestNG] Çalışıyor:C: \ Kullanıcılar \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: WARN Logger için ekleyici bulunamadı (org.apache.http.client.protocol.RequestAddCookies).log4j: UYARI Lütfen log4j sistemini doğru şekilde başlatın.log4j: WARN Daha fazla bilgi için http://logging.apache.org/log4j/1.2/faq.html#noconfig adresine bakın.Geçen zaman: 5022GEÇTİ: Giriş=======================================================================================================================Varsayılan testÇalıştırılan testler: 1, Başarısızlıklar: 0, Atlamalar: 0=======================================================================================================================

ExecuteScript örneği

ExecuteScript için tek tek üç farklı örnek göreceğiz.

1) Örnek: Oturum açmak ve JavaScriptExecutor kullanarak Uyarı penceresi oluşturmak için bir düğmeye tıklayın.

Bu senaryoda, JavaScriptExecutor'u göstermek için "Guru99" demo sitesini kullanacağız. Bu örnekte,

  • Web tarayıcısını başlatın
  • "http://demo.guru99.com/V4/" sitesini açın ve
  • kimlik bilgileriyle giriş yap
  • Başarılı oturum açma durumunda uyarı penceresini görüntüleyin.
import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Ölçekpublic void Giriş (){WebDriver sürücüsü = yeni FirefoxDriver ();// JavascriptExecutor arayüz nesnesini Type çevrimiyle oluşturmaJavascriptExecutor js = (JavascriptExecutor) sürücüsü;// Siteyi Başlatma.driver.get ("http://demo.guru99.com/V4/");WebElement düğmesi = driver.findElement (By.name ("btnLogin"));// Guru99'a giriş yapındriver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("parola")). sendKeys ("amUpenu");// JavascriptExecutor kullanarak LOGIN butonuna tıklamayı gerçekleştirinjs.executeScript ("arguments [0] .click ();", düğme);// JavascriptExecutor kullanarak Uyarı penceresi oluşturmak için. Uyarı mesajını gösterjs.executeScript ("alert ('Guru99'a Hoş Geldiniz');");}}

Çıktı: Kod başarıyla yürütüldüğünde. Gözlemleyeceksin

  • Oturum açma düğmesine başarılı tıklama ve
  • Uyarı penceresi görüntülenecektir (aşağıdaki resme bakın).

2) Örnek: Kazıma Verilerini Yakalayın ve JavaScriptExecutor'u kullanarak farklı sayfalara gidin.

Aşağıdaki selenyum komut dosyasını çalıştırın. Bu örnekte,

  • Siteyi başlatın
  • Sitenin URL'si, sitenin başlık adı ve alan adı gibi sitenin ayrıntılarını alın.
  • Ardından farklı bir sayfaya gidin.
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Ölçekpublic void Giriş (){WebDriver sürücüsü = yeni FirefoxDriver ();// JavascriptExecutor arayüz nesnesini Type çevrimiyle oluşturmaJavascriptExecutor js = (JavascriptExecutor) sürücüsü;// Siteyi Başlatma.driver.get ("http://demo.guru99.com/V4/");// Sitenin Alan Adı Alınıyor. Tostring () nesneyi isme dönüştürür.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Sitenin Etki Alanı adı =" + EtkiAlanıAdı);// Sitenin URL'si getiriliyor. Tostring () nesneyi isme dönüştürString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("sitenin URL'si =" + url);// Method.title yöntemi, sitenin Başlık adını alır. Tostring () nesneyi isme dönüştürString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Sayfanın Başlığı =" + BaşlıkAdı);// Yeni Sayfaya gidin, yani erişim sayfası oluşturmak için. (yeni url başlat)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Çıktı: Yukarıdaki kod başarıyla yürütüldüğünde, sitenin ayrıntılarını alacak ve aşağıda gösterildiği gibi farklı bir sayfaya gidecektir.

[TestNG] Çalışıyor:C: \ Kullanıcılar \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: WARN Logger için ekleyici bulunamadı (org.apache.http.client.protocol.RequestAddCookies).log4j: UYARI Lütfen log4j sistemini doğru şekilde başlatın.log4j: WARN Daha fazla bilgi için http://logging.apache.org/log4j/1.2/faq.html#noconfig adresine bakın.Sitenin alan adı = demo.guru99.comSitenin URL'si = http://demo.guru99.com/V4/Sayfanın başlığı = Guru99 Bank Ana SayfasıGEÇTİ: Giriş=======================================================================================================================Varsayılan testÇalıştırılan testler: 1, Başarısızlıklar: 0, Atlamalar: 0======================================================================================================================= 

3) Örnek: JavaScriptExecutor'u Kullanarak Aşağı Kaydırın.

Aşağıdaki selenyum komut dosyasını çalıştırın. Bu örnekte,

  • Siteyi başlatın
  • 600 piksel aşağı kaydır
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Ölçekpublic void Giriş (){WebDriver sürücüsü = yeni FirefoxDriver ();// JavascriptExecutor arayüz nesnesini Type çevrimiyle oluşturmaJavascriptExecutor js = (JavascriptExecutor) sürücüsü;// Siteyi Başlatma.driver.get ("http://moneyboats.com/");// Pencereyi büyütdriver.manage (). window (). maximize ();// 600 piksel aşağı dikey kaydırmajs.executeScript ("window.scrollBy (0,600)");}}

Çıktı : Yukarıdaki kod yürütüldüğünde, 600 piksel aşağı kaydırılır (aşağıdaki resme bakın).

Özet:

JavaScriptExecutor, Selenium Webdriver bazı sorunlardan dolayı herhangi bir öğeye tıklayamadığında kullanılır.

  • JavaScriptExecutor, işlemek için "executescript" ve "executeAsyncScript" adlı iki yöntem sağlar.
  • JavaScript'i Selenium Webdriver kullanarak çalıştırdı.
  • Selenyum bir sorun nedeniyle öğeye tıklamada başarısız olursa JavaScriptExecutor aracılığıyla bir öğenin nasıl tıklanacağını gösterir.
  • JavaScriptExecutor kullanarak 'Uyarı' penceresini oluşturdu.
  • JavaScriptExecutor kullanarak farklı sayfaya gidin.
  • JavaScriptExecutor kullanarak pencereyi aşağı kaydırdı.
  • JavaScriptExecutor kullanılarak URL, başlık ve alan adı getirildi.