我在显示对象列表的页面上运行Selenium,并为每个对象添加“删除”链接。
每当用户点击删除链接时,确认对话框就会显示并要求确认。如果用户单击“确定”,则删除该对象并重新加载页面。
现在,我想用 PHPUnit 和 Selenium 来测试这种行为。
以下代码是我最终尝试过的:
$this->open('account/admin');
$this->assertElementPresent('css=h1');
[...]
$this->verifyElementPresent('css=td.button-column a.delete[href$="delete/1"]');
$this->click('css=td.button-column a.delete[href$="delete/1"]');
$this->assertConfirmation('*supprimer*'); (1)
// $this->waitForPageToLoad(); (2)
$this->waitForElementNotPresent('css=td.button-column a.delete[href$="delete/1"]'); (3)
我很确定测试应该成功,因为manuel对该功能的测试是可以的。此外,我已禁用此页面的登录保护:任何用户都可以访问它。
不幸的是,我无法测试页面是否重新加载:测试(3)总是在“WaitFor time out”上失败...
在理解了文档之后,从Selenese的角度来看问题是导致重新加载页面的操作是 click()但是重新加载确认弹出对话框返回true后,实际上会发生。并且 waitForXXX()命令应该在导致重新加载的操作之后立即启动。
我尝试发表评论(1)虽然Selenium documentation表示必须使用相关的 assertXXX()来处理弹出对话框。结果是一样的。
我还尝试在(2) waitForPageToLoad(),但这只是...等待(300000000毫秒,显然是默认值,这对于任何页面来说都足够了重新加载...)
我陷入困境,无法想象我如何测试这种简单而平凡的行为...... 我错过了什么?