JavaScriptExecutorの Selenium 例を挙げて
何ですか Javaスクリプトエグゼキュータ?
JavaScriptExecutorは、実行を支援するインターフェースです。 Javaスクリプトを通して Selenium ウェブドライバー。 JavaScriptExecutor は、選択したウィンドウまたは現在のページで JavaScript を実行するための 2 つのメソッド「executescript」と「executeAsyncScript」を提供します。
なぜ必要なのか 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。この例では、
- ウェブブラウザを起動
- サイトを開く https://demo.guru99.com/V4/ や
- 資格情報でログイン
- ログイン成功時に警告ウィンドウを表示します。
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');"); } }
出力: コードが正常に実行されたとき。 あなたは観察するでしょう
- ログインボタンが正常にクリックされると、
- 警告ウィンドウが表示されます (下の画像を参照)。
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/'"); } }
出力: 上記のコードが正常に実行されると、サイトの詳細が取得され、以下に示すように別のページに移動します。
[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 ===============================================
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 ピクセル下にスクロールします (下の画像を参照)。
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スクリプトエグゼキュータ。