まえがき
Web系システムをテストする際、各ブラウザでテストしないといけず、メンドくさい。。
なので、node.jsを使ってSeleniumによる自動テストを作成中です。
Selenium-webdriverでテストを実行するとき、ブラウザのドライバーを用意しなければならない(ぽい)。
で、用意したものは使わないと意味がないんだけど、どうもググると「インストールする」と書いてばかり・・・・(´・ω・`)
Selenium-Serverを使う場合はオプションで指定できたと思ったんだけど、Selenium-webdriverだけだとダメなのか?
そう思って色々試したら、ドライバーを指定して利用することが出来たので、その備忘です。
ちなみに、なんでインストールを渋るのかというと、
誰か別の人が作る際に「これ使ってテストしてね」て言うと思うんだけど、
そのときにやってもらう手間を少しでも省きたかったからです。
手順がひとつ増えるごとにやるのがメンドくさくなるじゃないですか・・・・
メンドくさいことは誰しもやりたくないもんね。。。
ブラウザ用ドライバーをオプションで読み出す
ディレクトリ構成は↓
selenium
| package.json
|
+---drivers
| chromedriver.exe
| geckodriver.exe
|
+---node_modules
|
\---test
index.js
chromedriver.exe
はChrome用のドライバー、geckodriver.exe
はFirefox用のドライバーです。
node_modules
はさすがに深いので割愛・・・・。
const webdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
let driver = new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.chrome())
.setChromeService(new chrome.ServiceBuilder(__dirname+"/../drivers/chromedriver.exe"))
.build();
通常はシステムに設定されたパスからドライバーを探すようですが、
インストールしていないとそのパス上にはドライバーが存在しないので、見つけられずにエラーとなる。
なので、selenium-webdriver/chrome
の中にあるServiceBuilder
クラスを生成して、
setChromeService
で渡してやることで指定したドライバーを使ってくれます。
Firefoxの場合も同様に出来ます。
const webdriver = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
let driver = new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.firefox())
.setFirefoxService(new firefox.ServiceBuilder(__dirname+"/../drivers/geckodriver.exe"))
.build();
IEの場合
IEだとsetChromeService
に該当するようなメソッドがなく、どう指定したらいいものか思考錯誤していたところ、結局PATHに追加するしかないかな、というところに。。(´・ω・`)
とはいえ、やはりインストールはさせたくない。。
そこで、呼び出し用のファイルを1枚かませることにしました。
// ドライバーを設定
process.env['PATH'] = `${process.env['PATH']};${__dirname}/../drivers/;`
mocha test/ie.js test/*.js
最初に設定ファイルであるselenium/test/ie.js
を呼び出して、その後に各テストファイルを呼び出す感じに。
これでドライバーを動的に呼び出せるようになりました。
まぁ、実はまだ別のエラーが出てまして動いてはいないんですけど・・・・('A`)
そちらも解決出来たらまた追記します。。。
あと、IE側でやらないといけない設定まわりの記事がありましたので、メモ。
Selenium (webDriver) と IE11の組み合わせについて
あとがき
今回はこれだけ。
Seleniumは何度か挑戦してみたものの、書き方がよく分からなかったり、
そもそもSelenium-serverがうまく動かなかったりで頓挫していました。
今度はちゃんと出来るといいなぁ。。。
余談
IEドライバーの指定方法がまだ分かってません。。。(;´Д`)
setChromeService
に該当するようなメソッドがなく、どう指定したらいいものかまだソースを漁り中です。。。
一番問題起こしてくるヤツなのに、、、
とりあえず呼び出しができたので追記しました!(/ω\)