Help us understand the problem. What is going on with this article?

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

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

clustfe
最近はフリーランスでやらしてもらっています 仕事としてはPHPが99%・・・・のわりに技術は浅いです(´・ω・`) あと、PS2「ボクと魔王」が好きです
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away