JavaScriptExecutorの Selenium 例を挙げて

何ですか Javaスクリプトエグゼキュータ?

JavaScriptExecutorは、実行を支援するインターフェースです。 Javaスクリプトを通して Selenium ウェブドライバー。 JavaScriptExecutor は、選択したウィンドウまたは現在のページで JavaScript を実行するための 2 つのメソッド「executescript」と「executeAsyncScript」を提供します。

Javaスクリプトエグゼキュータ

なぜ必要なのか Javaスクリプトエグゼキュータ?

In Selenium Webdriver、XPath、CSS などのロケータは、Web ページを識別して操作を実行するために使用されます。

これらのロケーターが機能しない場合は、 JavaScriptExecutor。 JavaWeb 要素に対して必要な操作を実行する ScriptExecutor。

Selenium JavaScriptExecutorをサポートします。追加のプラグインやアドオンは必要ありません。インポートするだけです (org.openqa.selenium を参照してください。Javascript執行者)をスクリプトで使用する Javaスクリプトエグゼキュータ。

JavaScriptExecutorメソッド Selenium

スクリプトの実行

このメソッドが実行されるのは、 Javaスクリプト 現在選択されているフレームまたはウィンドウのコンテキスト内で Selenium。このメソッドで使用されるスクリプトは、匿名関数 (名前のない関数) の本体で実行されます。複雑な引数を渡すこともできます。

スクリプトは値を返すことができます。 返されるデータ型は次のとおりです

  • ブーリアン
  • 長い
  • String
  • リスト
  • WebElement。

Javascript実行者の構文:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • スクリプト - これは Java実行する必要があるスクリプト。
  • Arguments – スクリプトの引数です。 それはオプションです。

非同期スクリプトの実行

非同期スクリプトを使用すると、ページのレンダリングが速くなります。ページがレンダリングされる前にスクリプトのダウンロードをユーザーに待たせる代わりに、この関数は非同期の部分を実行します。 Java現在選択されているフレームまたはウィンドウのコンテキストでスクリプトを実行する Seleniumこのように実行される JS は、同期的に実行されるさまざまなコールバック関数を備えたシングルスレッドです。

使用方法 JavaScriptExecutorの Selenium

ここでは、使用方法を段階的に説明します。 JavaScriptExecutorの Selenium:

ステップ1) パッケージをインポートします。

import org.openqa.selenium.JavascriptExecutor;

ステップ2) 参照を作成します。

JavascriptExecutor js = (JavascriptExecutor) driver;

ステップ3) コー​​ル Javascript実行者メソッド。

js.executeScript(script, args);

要素をクリックする例 JavaScripExecutorの Selenium

executeScript については、XNUMX つの異なる例を XNUMX つずつ見ていきます。

1) 例: ボタンをクリックしてログインし、アラートウィンドウを生成する Javaスクリプトエグゼキュータ。

このシナリオでは、「Guru99」のデモサイトを使用して説明します。 JavaScriptExecutor。この例では、

ボタンをクリックしてログインし、アラートウィンドウを生成する Javaスクリプトエグゼキュータ

  • ログイン成功時に警告ウィンドウを表示します。
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 {				


    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
        		
        WebElement button =driver.findElement(By.name("btnLogin"));			
        		
        //Login to Guru99 		
        driver.findElement(By.name("uid")).sendKeys("mngr34926");					
        driver.findElement(By.name("password")).sendKeys("amUpenu");					
        		
        //Perform Click on LOGIN button using JavascriptExecutor		
        js.executeScript("arguments[0].click();", button);
                                
        //To generate Alert window using JavascriptExecutor. Display the alert message 			
        js.executeScript("alert('Welcome to Guru99');");   
    		
    }		
}

出力: コードが正常に実行されたとき。 あなたは観察するでしょう

  • ログインボタンが正常にクリックされると、
  • 警告ウィンドウが表示されます (下の画像を参照)。

ボタンをクリックしてログインし、アラートウィンドウを生成する Javaスクリプトエグゼキュータ

2) 例: スクレイピングデータをキャプチャし、異なるページに移動 Javaスクリプトエグゼキュータ。

以下のSeleniumスクリプトを実行します。この例では、

  • サイトを立ち上げる
  • サイトの URL、タイトル名、ドメイン名などのサイトの詳細を取得します。
  • 次に、別のページに移動します。
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 {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");
			
        //Fetching the Domain Name of the site. Tostring() change object to name.		
        String DomainName = js.executeScript("return document.domain;").toString();			
        System.out.println("Domain name of the site = "+DomainName);					
          		
        //Fetching the URL of the site. Tostring() change object to name		
        String url = js.executeScript("return document.URL;").toString();			
        System.out.println("URL of the site = "+url);					
          		
       //Method document.title fetch the Title name of the site. Tostring() change object to name		
       String TitleName = js.executeScript("return document.title;").toString();			
       System.out.println("Title of the page = "+TitleName);					

        		
      //Navigate to new Page i.e to generate access page. (launch new url)		
      js.executeScript("window.location = 'https://demo.guru99.com/'");			
    }		
}

出力: 上記のコードが正常に実行されると、サイトの詳細が取得され、以下に示すように別のページに移動します。

スクレイピングデータをキャプチャし、さまざまなページに移動するには Javaスクリプトエグゼキュータ

[TestNG] Running:		
  C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-467151014\testng-customsuite.xml		

log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Domain name of the site = demo.guru99.com		
URL of the site = https://demo.guru99.com/V4/		
Title of the page = Guru99 Bank Home Page		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0
===============================================

スクレイピングデータをキャプチャし、さまざまなページに移動するには Javaスクリプトエグゼキュータ

3) 例: スクロールダウンするには Javaスクリプトエグゼキュータ。

以下のSeleniumスクリプトを実行します。この例では、

  • サイトを立ち上げる
  • 600ピクセル下にスクロールします
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 {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("http://moneyboats.com/");			
     
        //Maximize window		
        driver.manage().window().maximize();		
        		
        //Vertical scroll down by 600  pixels		
        js.executeScript("window.scrollBy(0,600)");			
    }		
}

出力: 上記のコードを実行すると、600 ピクセル下にスクロールします (下の画像を参照)。

スクロールダウンするには Javaスクリプトエグゼキュータ

executeAsyncScriptの例 Selenium

executeAsyncScript を使用すると、テストのパフォーマンスが向上します。これにより、通常のコーディングのようにテストを記述できるようになります。

幹部Sync によって実行されるさらなるアクションをブロックします。 Selenium ブラウザですが、execAsyncはアクションをブロックしません。サーバー側にコールバックを送信します。 テスト スクリプトが完了したら、スイートを作成します。 これは、スクリプト内のすべてがサーバーではなくブラウザによって実行されることを意味します。

例 1: テスト対象のブラウザでスリープを実行します。

このシナリオでは、「Guru99」デモサイトを使用してexecuteAsyncScriptを説明します。この例では、

  • ブラウザを起動します。
  • オープンサイト https://demo.guru99.com/V4/.
  • アプリケーションはさらにアクションを実行するために 5 秒待機します。

ステップ1) executeAsyncScript() メソッドを使用して、5 秒 (5000 ミリ秒) 待機する前に開始時刻をキャプチャします。

ステップ2) 次に、executeAsyncScript() を使用して 5 秒間待機します。

ステップ3) 次に、現在時刻を取得します。

ステップ4) 減算 (現在時刻 – 開始時刻) = 経過時間。

ステップ5) 出力が 5000 ミリ秒を超えて表示されることを確認します。

import 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 {				

    @Test		
    public void Login() 					
    {		
        		
        WebDriver driver= new FirefoxDriver();			

        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
     
          //Maximize window		
          driver.manage().window().maximize();		
        		
          //Set the Script Timeout to 20 seconds		
          driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS);			
             
          //Declare and set the start time		
          long start_time = System.currentTimeMillis();			
                   
          //Call executeAsyncScript() method to wait for 5 seconds		
          js.executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 5000);");			
          		
         //Get the difference (currentTime - startTime)  of times.		
         System.out.println("Passed time: " + (System.currentTimeMillis() - start_time));					
                    		
    }		
}			

出力: 以下のように、5秒(5000ミリ秒)を超える経過時間を表示することに成功しました。

[TestNG] Running:		
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-387352559\testng-customsuite.xml		
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Passed time: 5022		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0		
===============================================

製品概要

JavaScriptExecutorは次のような場合に使用されます。 Selenium 何らかの問題により、Webdriver はどの要素もクリックできません。

  • JavaScriptExecutor は、処理するための 2 つのメソッド「executescript」と「executeAsyncScript」を提供します。
  • を実行しました Java使用するスクリプト Selenium ウェブドライバー。
  • 要素をクリックする方法を図解 JavaScriptExecutor、何らかの問題により Selenium が要素をクリックできない場合。
  • 「アラート」ウィンドウを生成しました Javaスクリプトエグゼキュータ。
  • 別のページに移動するには Javaスクリプトエグゼキュータ。
  • ウィンドウを下にスクロールすると Javaスクリプトエグゼキュータ。
  • URL、タイトル、ドメイン名を次のように取得しました Javaスクリプトエグゼキュータ。