对于C#,有一种方法可以编写一个语句来等待页面上的元素出现:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.Id("someDynamicElement"));
});
但有没有办法在phpunit的selenium扩展中做同样的事情?
我唯一发现的是$this->timeouts()->implicitWait()
,但显然这不是我想要的。
这个问题是关于Selenium2和PHPUnit_Selenium2的扩展。
答案 0 :(得分:8)
您找到的implicitWait
是您可以使用的而不是waitForCondition。
正如WebDriver API(你也发现;)的规范说明:
implicit - 设置驱动程序在搜索元素时应等待的时间。搜索单个元素时,驱动程序应轮询页面,直到找到元素或超时到期,以先发生者为准。
例如,此代码最多等待30秒才能显示元素,然后再点击它:
public function testClick()
{
$this->timeouts()->implicitWait(30000);
$this->url('http://test/test.html');
$elm = $this->clickOnElement('test');
}
缺点是它设置了会话的生命周期,并且可能会减慢其他测试的速度,除非它被设置为0。
答案 1 :(得分:1)
根据我的经验,从phpunit调试selenium测试用例非常困难,更不用说维护它们了。我在项目中使用的方法是使用Selenium IDE,将测试用例存储为.html文件,并且只能通过phpunit调用它们。如果有任何问题,我可以从IDE中进行午餐,然后调试就更容易了。 Selenium IDE有waitForElementPresent,waitForTextPresent和可能的其他一些方法,可以解决你的问题。如果您想尝试一下,可以在继承自Selenium Test Case类的类中使用此方法。
$this->runSelenese("/path/to/test/case.html");