[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); }
うーん。。。