dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[Selenium]executeScriptで外部jsファイルを読み込む

探してもあんまり載ってなかったので書きます。

WebDriver APIにはJavascriptExecutor.executeScript()というメソッドが用意されており、
これにより使用する言語が何であれ、ソースコード中にjavascriptを記載して実行させることができます。

しかし、executeScriptのサンプルとしてネットにあるのはたいていこんな感じで
引数に直接スクリプトを書いてしまってます。

// jsはJavascriptExecutorインスタンス
js.executeScript("return document.getElementById('someId');");

これでは複雑な処理をjavascriptで行うには不都合なので、
何とか別のjsファイルに記述した内容をそのまま実行する方法はないかと調べてました。

で、以下はその方法。
結局のところ、調べた限りではjsファイル名を指定して実行させる、みたいなことはできなさそう。
なので、ファイルの中身を一旦文字列に保存して、それを渡す...という方法で実現します。

// 通常のファイル読み込みと同じように1行ずつ読み込んで、executeScriptに渡す
BufferedReader br = new BufferedReader(new FileReader("sample.js"));
String line;
StringBuilder builder = new StringBuilder();
while ((line = br.readLine()) != null) {
System.out.println(line);
	builder.append(line);
}
String myScript = builder.toString();

WebDriver driver = new FirefoxDriver(profile);

// javascriptを実行
if (driver instanceof JavascriptExecutor) {
	((JavascriptExecutor) driver).executeScript(myScript);
}

うーん。。。