Selenium WebDriverのJavaScriptエグゼキューターとは何ですか?
それはどのように使用され、Selenium WebDriverでこれをどのように使用できますか?
例は高く評価されます
JavascriptExecutor はSeleniumインターフェースであり、以下のすべてによって実装されていますクラス:
FirefoxDriver
ChromeDriver
InternetExplorerDriver
EdgeDriver
OperaDriver
SafariDriver
RemoteWebDriver
EventFiringWebDriver
Seleniumスクリプトを実行している間、クロスドメインポリシーにより、ブラウザはスクリプトの実行を強制し、予期しないエラーが発生したり、適切なエラーログが記録されない場合があります。これは、独自のXHRリクエストを作成するとき、または別のフレームにアクセスしようとするときに特に適切です。
JavascriptExecutorインターフェースは、次の2つのメソッドを提供します。
executeScript()
:このメソッドは、現在選択されているフレームまたはウィンドウのコンテキストでJavaScriptを実行します。提供されたスクリプトフラグメントは、無名関数の本体として実行されます。スクリプト内では、現在のドキュメントを参照するためにdocument
を使用する必要があります。スクリプトの実行が完了すると、ローカル変数は使用できなくなりますが、グローバル変数は保持されます。
executeAsyncScript()
:このメソッドは、現在選択されているフレームのコンテキストでJavaScriptの非同期部分を実行します。窓。同期JavaScriptの実行とは異なり、このメソッドで実行されたスクリプトは、提供されたコールバックを呼び出すことによって、終了を明示的に通知する必要があります。このコールバックは常に最後の引数として実行された関数に注入されます。
いくつかの例:
String js = "arguments[0].setAttribute('value','"+inputText+"')"
((JavascriptExecutor) webDriver).executeScript(js, element);
new Actions(driver).moveToElement(myElem, posX, posY).perform();
((JavascriptExecutor)driver).executeScript(jsDoubleClick, myElem, posX, posY);
String myValue = "80120804076";
WebElement pesel = driver.findElement(fldPesel);
jse.executeScript("arguments[0].value='" + myValue + "';", pesel);
また、argumentsに関する詳細な説明は、 からのexecuteScriptメソッドの使用時のarguments [0]およびarguments [1]の意味は次のとおりです。 Selenium WebDriverを介したJavascriptExecutorインターフェース?
長い答えと短い答えは:
これは、WebページのHTML DOMを直接操作できるSeleniumインターフェースであり、次の構文を使用してJavaScript式を実行することによって行われます。
(JavascriptExecutor) driver.executeScript("JavaScript_EXPRESSION_HERE", ADDITIONAL_ARGUMENTS);
JavascriptExecutorは、ページが本質的に完全にロードされていない場合や、要素が直接の対話をブロックする方法で配置されている場合でも、ユーザーの対話を自動化する方法を提供します。
ただし、これは、実際のユーザーエクスペリエンスのようにWebページを自動化する場合にも欠点です。とはいえ、これは本当に強力なオプションですが、Seleniumを介して実行する標準的な方法がない限り、JavaScript Executorを使用しないようにする必要があります。
詳細については、次のリンクを参照してください。 https://seleniumhq.github.io/Selenium/docs/api/Java/org/openqa/Selenium/JavascriptExecutor.html
ドライバーがJavaScriptを実行できることを示し、そのためのメカニズムへのアクセスを提供します。クロスドメインポリシーにより、ブラウザはスクリプトの実行を強制し、スクリプトの実行が予期せず、適切なエラーメッセージなしで失敗する可能性があります。これは、独自のXHRリクエストを作成するとき、または別のフレームにアクセスしようとするときに特に適切です。ほとんどの場合、障害のトラブルシューティングを行うときは、WebDriverリクエストを実行した後にブラウザのコンソールを表示するのが最善です。
基本的にjsエグゼキューターを使用すると、Seleniumドライバーからjsコードを実行できます。
例:JSで要素にスクロールします。
element = driver.findElement(By.id("test"));
(JavascriptExecutor) driver.executeScript("arguments[0].scrollIntoView(true);", element);