【Selenium2+PHPUnit】処理が終わるまでタイムアウトをしない

やっとPHPUnitでAndroidのWebdriverを操作できるように。
近々まとめたいですが、中々まとまった時間が取れなくてまとめられない……。

今回は、Androidでどうしてもタイムアウトが起こってしまいテストが出来なかったので、
sleepを使わずに、PHPUnitで用意されているWait関数を使用して処理を待つ方法。
Android用ではないので、PCブラウザでも利用可能。

Googleで任意の文字をテキストボックスに打ち、それを検索するテストスクリプトを作りました。

Sp.php

上記を実行したところ、以下のエラーが発生。

PHPUnit 3.7.21 by Sebastian Bergmann.

E

Time: 18 seconds, Memory: 2.00Mb

There was 1 error:

1) Sp::testTitle
PHPUnit_Extensions_Selenium2TestCase_WebDriverException: Could not find element
with name: q
For documentation on this error, please visit: http://seleniumhq.org/exceptions/
no_such_element.html
Build info: version: ‘unknown’, revision: ‘unknown’, time: ‘unknown’
System info: os.name: ‘Linux’, os.arch: ‘armv7l’, os.version: ‘2.6.29-g46b05b2’,
java.version: ‘0’
Driver info: driver.version: EventFiringWebDriver

C:\testcase\Sp.php:17
C:\testcase\Sp.php:17

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.

Could not find element
with name: q

どうもページの表示にえらい時間がかかってしまい、「q」というName属性のエレメントが見つからない様子。
16行目の後にsleepを入れれば、まあ一応解決はしますが、それだとなんだかイケてないので、
PHPUnitで用意されているWait関数を使うことに。

以下に改良。

$this->waitUntil(実行関数, タイムアウト時間(ms));

PHP5.3以上なので、実行関数には無名関数を設定。
第2引数に50000と設定をしたので、第1引数の処理が終わるか、50秒経つまで待つ仕組み。
実行が終わるか50秒の早いほうまでWaitなので、sleep(50)を行うよりも高速に実行が可能。

ということで実行。

PHPUnit 3.7.21 by Sebastian Bergmann.

.

Time: 35 seconds, Memory: 3.25Mb

OK (1 test, 0 assertions)

無事テストをクリアしました。

シェア: