7

C# の場合、ページ上の要素が表示されるまで待機するステートメントを記述する方法があります。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id("someDynamicElement"));
    });

しかし、phpunit のセレン拡張で同じことを行う方法はありますか?

注1

私が見つけたのは だけですが$this->timeouts()->implicitWait()、明らかにそれは私が探しているものではありません。

注2

この質問は、それに応じて Selenium2 および PHPUnit_Selenium2 拡張機能に関するものです。

4

2 に答える 2

8

implicitWait見つけた は、waitForCondition の代わりに使用できるものです。WebDriver APIの仕様(あなたも見つけた;))が述べているように:

暗黙的 - 要素を検索するときにドライバーが待機する時間を設定します。1 つの要素を検索する場合、ドライバーは、要素が見つかるかタイムアウトになるまで、ページをポーリングする必要があります。

たとえば、次のコードは、要素をクリックする前に、要素が表示されるまで最大 30 秒待機します。

public function testClick()
{
    $this->timeouts()->implicitWait(30000);
    $this->url('http://test/test.html');
    $elm = $this->clickOnElement('test');
}

欠点は、セッションの存続期間にわたって設定され、0 に戻さない限り他のテストの速度が低下する可能性があることです。

于 2012-12-30T23:24:13.573 に答える
1

私の経験から、phpunitからセレンテストケースをデバッグすることは非常に困難であり、それらを維持することは言うまでもありません。私がプロジェクトで使用しているアプローチは、Selenium IDEを使用し、テストケースを.htmlファイルとして保存し、phpunitを介してのみ呼び出すことです。何か問題がある場合は、IDEからランチして、はるかに簡単な理由でデバッグできます。また、Selenium IDEには、waitForElementPresent、waitForTextPresent、およびおそらく他のメソッドがあり、問題を解決できます。試してみたい場合は、SeleniumTestCaseクラスを継承するクラスでこのメソッドを使用できます。

    $this->runSelenese("/path/to/test/case.html");
于 2012-12-30T21:34:42.790 に答える