20

Selenium WebDriver を使用して、すべてを executeScript に入力するのではなく、外部 JavaScript ファイルを DOM に挿入しようとしています。

ノードを DOM に適切に配置しているように見えますが、ソースを無視するだけです。つまり、ソース js ファイルの関数は実行されません。

これが私のコードです:

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;

public class Example  {
    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://google.com");
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("document.getElementsByTagName('head')[0].innerHTML += '<script src=\"<PATH_TO_FILE>\" type=\"text/javascript\"></script>';");
    }
}

私がリンクしているjavascriptファイルのコードは

alert("hi Nate");

ローカルホストに js ファイルを配置し、file:/// を使用して呼び出し、外部サーバーで試しました。サイコロはありません。

また、Javaの部分で、その裏技を使って「scr」+「ipt」をつけてみましたが、やはりうまくいきませんでした。Firefox の inspect 要素を使用して DOM を調べると、スクリプト ノードが適切に読み込まれていることがわかり、かなり混乱しています。

私はまた、このソリューションを試しました.Seleniumの別のバージョン(webdriverではない)用に作成されたようで、少なくとも少しは機能しませんでした.Seleniumで有用なテスト関数を含む外部jsファイルをロードします

4

2 に答える 2

15

これによると:http://docs.seleniumhq.org/docs/appendix_migrating_from_rc_to_webdriver.jsp

現在のウィンドウまたはテストのドキュメントへのハンドルを取得するために browserbot を使用している可能性があります。幸いなことに、WebDriver は常に現在のウィンドウのコンテキストで JS を評価するため、「window」または「document」を直接使用できます。

または、browserbot を使用して要素を検索することもできます。WebDriver では、これを行うためのイディオムは、最初に要素を見つけてから、それを引数として Javascript に渡すことです。したがって:

それで、次はwebdriverで機能しますか?

WebDriver driver = new FirefoxDriver();
((JavascriptExecutor) driver)
  .executeScript("var s=window.document.createElement('script');\
  s.src='somescript.js';\
  window.document.head.appendChild(s);");
于 2013-06-30T04:22:21.433 に答える