web-dev-qa-db-ja.com

SeleniumのJavaScriptExecutorとは何ですか?

Selenium WebDriverのJavaScriptエグゼキューターとは何ですか?

それはどのように使用され、Selenium WebDriverでこれをどのように使用できますか?

例は高く評価されます

JavascriptExecutor

JavascriptExecutorSeleniumインターフェースであり、以下のすべてによって実装されていますクラス:

  • FirefoxDriver
  • ChromeDriver
  • InternetExplorerDriver
  • EdgeDriver
  • OperaDriver
  • SafariDriver
  • RemoteWebDriver
  • EventFiringWebDriver

Seleniumスクリプトを実行している間、クロスドメインポリシーにより、ブラウザはスクリプトの実行を強制し、予期しないエラーが発生したり、適切なエラーログが記録されない場合があります。これは、独自のXHRリクエストを作成するとき、または別のフレームにアクセスしようとするときに特に適切です。

詳細な説明は ncaught DOMException:Blocked a frame with Origin "http:// localhost:8080" from access cross-Origin frame during in iframes in page にあります。

JavascriptExecutorインターフェースは、次の2つのメソッドを提供します。

  • executeScript() :このメソッドは、現在選択されているフレームまたはウィンドウのコンテキストでJavaScriptを実行します。提供されたスクリプトフラグメントは、無名関数の本体として実行されます。スクリプト内では、現在のドキュメントを参照するためにdocumentを使用する必要があります。スクリプトの実行が完了すると、ローカル変数は使用できなくなりますが、グローバル変数は保持されます。

  • executeAsyncScript() :このメソッドは、現在選択されているフレームのコンテキストでJavaScriptの非同期部分を実行します。窓。同期JavaScriptの実行とは異なり、このメソッドで実行されたスクリプトは、提供されたコールバックを呼び出すことによって、終了を明示的に通知する必要があります。このコールバックは常に最後の引数として実行された関数に注入されます。


いくつかの例:

また、argumentsに関する詳細な説明は、 からのexecuteScriptメソッドの使用時のarguments [0]およびarguments [1]の意味は次のとおりです。 Selenium WebDriverを介したJavascriptExecutorインターフェース?


tl; dr

クロスドメインポリシーファイルの指定

3
DebanjanB

長い答えと短い答えは:

これは、WebページのHTML DOMを直接操作できるSeleniumインターフェースであり、次の構文を使用してJavaScript式を実行することによって行われます。

(JavascriptExecutor) driver.executeScript("JavaScript_EXPRESSION_HERE", ADDITIONAL_ARGUMENTS);

JavascriptExecutorは、ページが本質的に完全にロードされていない場合や、要素が直接の対話をブロックする方法で配置されている場合でも、ユーザーの対話を自動化する方法を提供します。

ただし、これは、実際のユーザーエクスペリエンスのようにWebページを自動化する場合にも欠点です。とはいえ、これは本当に強力なオプションですが、Seleniumを介して実行する標準的な方法がない限り、JavaScript Executorを使用しないようにする必要があります。

2
kushal.8

詳細については、次のリンクを参照してください。 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);
0
Infern0