selenium gridやjenkinsを返さず単体のコードのみで複数のdriverを並列実行

                                        

複数のdriverを一気に立ち上げる

複数のdriverを宣言するのには普通に考えると以下のようになります。

スマートじゃないですよね。。。
for文とかでできないかなと思うのですが。。こんな感じで。

syntax errorですね。。。

 

配列でいける

配列でやってみましょう。

10個のドライバーが立ち上がりましたね。
同じように以下でもいけます。

これでdriver配列に10個のselenium webdriverオブジェクトが入りました。

それぞれのdriverの呼び出しはdriver配列の中を呼び出すので

で大丈夫です。

 

seleniumの並列処理

例えば、以下のようなコードを実装した時に

driver[0]のクリックで画面がロードが終わってからdriver[1]の処理が始まります。
これを全てのドライバーで一気にクリックを行いたいと思いました。

seleniumの並列処理と言えば、selenium gridやjenkinsというイメージがありますが、
同一の処理を複数のドライバーで行うのであれば単体のコードのみで実装できます。

threadクラスを使う

同一の処理を複数のドライバーで行いたい時に Parallel でやってみたのですが、
seleniumとの相性が悪いのかうまく動きませんでした。

そこで特別なgemなどを使わずに標準で入っているthreadクラスで試してみました。

おおお、すべて並列で動作していますね。

threadクラスに関してはドキメントがあるので見てみてください。
class Thread (Ruby 2.4.0) 

まとめ

では、複数のdriverを立ち上げてそれを並列処理するためのコードをまとめてみましょう。

スマートに複数driverでの並列実行ができましたね。