7

对于 C#,有一种方法可以编写等待页面上的元素出现的语句:

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

但是有没有办法在 phpunit 的 selenium 扩展中做同样的事情?

注1

我发现的唯一东西是$this->timeouts()->implicitWait(),但显然这不是我要找的东西。

笔记2

这个问题是关于 Selenium2 和 PHPUnit_Selenium2 扩展的。

4

2 回答 2

8

你找到的implicitWait是你可以使用的,而不是waitForCondition。正如WebDriver API的规范(您还发现了 ;))所述:

隐式 - 设置驱动程序在搜索元素时应等待的时间。搜索单个元素时,驱动程序应轮询页面,直到找到一个元素或超时到期,以先发生者为准。

例如,此代码将等待最多 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 测试用例,更不用说维护它们了。我在项目中使用的方法是使用 Selenium IDE,将测试用例存储为 .html 文件并仅通过 phpunit 调用它们。如果有任何问题,我可以从 IDE 中午餐它们并以更简单的方式进行调试。Selenium IDE 有 waitForElementPresent、waitForTextPresent 和可能的其他方法,可以解决您的问题。如果你想尝试一下,你可以在继承自 Selenium 测试用例类的类中使用这个方法。

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