10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-28

まえがき

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

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

10
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?