Edited at

Selenium-webdriverでブラウザ用ドライバーを指定して動かすよ

More than 1 year has passed since last update.


まえがき

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はさすがに深いので割愛・・・・。


selenium/test/index.js(chromedriver)

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の場合も同様に出来ます。


selenium/test/index.js(geckodriver)

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枚かませることにしました。


selenium/test/ie.js

// ドライバーを設定

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に該当するようなメソッドがなく、どう指定したらいいものかまだソースを漁り中です。。。

一番問題起こしてくるヤツなのに、、、

とりあえず呼び出しができたので追記しました!(/ω\)