ruby + selenium(RSpecなど)の例外処理には回数を指定すべきです

                                        

エラーを捕捉してくれる例外処理(begin,rescue,retry)

自動テストなどでは、対象のアプリの不具合ではなく、コードやマシンなどのクライアント側のエラーが発生した場合のために例外処理を入れると運用がスムーズになります。
これ超便利。「なぜか時々ここでコケるんだよなぁ。。。」っていう場合にエラーを捕捉して、その処理をやり直してくれます。

こんな感じですね。

begin句の処理が成功するまでエラーを吐かずにリトライしてくれます。
改めて超便利ですね。余計なsleepとか入れなくて良いので助かります。

 

永遠に通らなければただの無限ループになってしまうので危険

注意すべきは、begin句の処理が永遠に通らなければ、永遠にretryし続けます。
無限ループでテストが止まってしまいますね。

では、どうすべきか。

 

試行回数を指定して、超えたらraiseでエラーを発生させる

さすがに10回試して1度も通らなければアプリやテストコードを修正すべきでしょう。
ということで例外処理に回数を指定して、10回以上失敗したらエラーを発生させます。

簡単ですね。

また、以前記事にも書いたのですが、補足したエラーを表示させつつ、retryすることもできます。
通ったけど、何か問題があるよっていうことを知らせてくれます。

rescueでどんなエラーが起きたか表示させる | katsulog

 

RSpecであればpendingを発生させるのも良いのではないでしょうか。