中年エンジニアの開発と生活の日々

中年エンジニアがソフトウェア開発や日々の生活で得た知見の備忘録

Appium のテストスクリプトで長めの Sleep を入れる

本日は小ネタです。

内部の実装上の都合で、Appium のテストスクリプト (Rubyで書いてます) の中で長めの Wait を入れる必要がありました。テストスクリプトの中で

  sleep 90

とか、長めの Sleep を入れたところ、テストスクリプトの実行時に以下のようなエラーメッセージが出ました。

     Failure/Error: @driver.quit
     
     Selenium::WebDriver::Error::NoSuchDriverError:
       A session is either terminated or not started

なにもしてないのに、なぜ故に@driver.quit がこけるのだ。すでにセッションが終了しているだと…

エラーの原因

Appium のログを見たところ以下のような記載がありました。

[BaseDriver] Shutting down because we waited 60 seconds for a command
[Appium] Closing session, cause was 'New Command Timeout of 60 seconds expired. Try customizing the timeout using the 'newCommandTimeout' desired capability'

どうも、コマンドのタイムアウトが60秒でそれを超えるとセッションが閉じるようです。何もしていないのに @driver.quit が失敗したのではなく、何もしなかったので @driver.quit が失敗してしまったというわけです。

解決策

ログの通りに、appium 起動時の設定オプションの desired capability に newCommandTimeout=120 と設定したら、90秒の Sleep を挟んでも問題なくテストスクリプトが動作しました。