0

拡張機能を使用してPHPUnit_Seleniumいますが、要素が存在しない場合に望ましくない動作が発生します。

Seleniumテストケース:

$this->type('id=search', $searchTerm);

テスト出力:

RuntimeException:'http:// localhost:4444 / selenium-server / driver /'にあるSeleniumサーバーへのアクセス中に無効な応答:エラー:要素id=searchが見つかりません

だから、私はエラーを受け取りますが、代わりにそれを失敗に変換したいと思います

私はこれを考慮しました:

try {
    $this->type('id=search', $searchTerm);
} catch (RuntimeException $e) {
    $this->fail($e->getMessage());
}

しかし、私は実際にはすべてのランタイム例外を失敗に変換したくはなく、それらを区別するための明確な方法を見ていません。

追加のアサーションは素晴らしいでしょうが、私のニーズに合うものを見つけることができません。何かのようなもの:

$this->assertLocatorExists('id=search'); // ???
$this->type('id=search', $searchTerm);

私は何かが足りないのですか?それとも私が考えていなかった別の方法はありますか?

使用バージョン:

  • PHPUnit 3.7.14
  • PHPUnit_Selenium 1.2.12
  • Seleniumサーバー2.30.0
4

3 に答える 3

2

このようなことをしてみませんか:

$ element = $ this-> byId('search');

//https://github.com/sebastianbergmann/phpunit-selenium/blob/master/Tests/Selenium2TestCaseTest.phpから

Javaでは(申し訳ありませんが、JavaではSeleniumを使用しています)、id searchの要素が見つからない場合、これは例外をスローします。ドキュメントをチェックして、phpでも同じ動作かどうかを確認します。それ以外の場合は、$ elementが有効かどうかを確認できます。例:is_null($ element)

于 2013-02-28T15:04:54.123 に答える
2

に基づくテストケースの場合SeleniumTestCase、次の方法が役立つことがわかりました。

getCssCount($cssSelector)
getXpathCount($xpath)
assertCssCount($cssSelector, $expectedCount)
assertXpathCount($xpath, $expectedCount)

@FarlanSelenium2TestCaseによって提案されたソリューションに基づくテストケースが機能する場合、次のメソッドは要素を取得し、要素が見つからなかった場合は例外をスローします。

byCssSelector($value)
byClassName($value)
byId($value)
byName($value)
byXPath($value)

私の場合、テストはから派生してSeleniumTestCaseいるので、質問の例の解決策は次のとおりです。

$this->assertCssCount('#search', 1);
于 2013-03-06T13:36:38.150 に答える
1

そうですね、catchブロックの例外メッセージテキストを確認し、一致しない場合Element id=search not found(または適切な正規表現)に再スローすることができます。

try {
    $this->type('id=search', $searchTerm);
} catch (RuntimeException $e) {
    $msg = $e->getMessage();
    if(!preg_match('/Element id=[-_a-zA-Z0-9]+ not found/',$msg)) {
        throw new RuntimeException($msg);
    }
    $this->fail($msg);
}

理想的ではありませんが、それでうまくいきます。

これは、標準の例外クラスを再利用するのではなく、カスタムの例外クラスを作成する必要がある理由を示していると思います。

または、オープンソースであるため、もちろん、phpunit Selenium拡張機能をいつでも変更して、カスタム例外クラスを与えることができます。

于 2013-02-25T14:37:07.883 に答える