我是PHPUnit和Selenium的新手,我想通过确认具有给定ID的元素在单击按钮之前存在,但在单击按钮后不再存在来测试"删除"按钮。
如果我使用这样的东西来检查元素是否已被删除:
$this->assertFalse($this->byId('idRemoved'));
然后我在byId()
中遇到测试失败,因为它找不到idRemoved
(这是真的,因为它不存在。
元素,以便在找到idRemoved
时测试失败?
这就是
我最终使用的,多亏了Karna的建议。 当我使用PHP时,我将其作为另一个答案发布,因此为了其他使用PHPUnit和Selenium的人的利益,这里有一种与Karna类似的方法,但对于PHPUnit:
try {
$this->byId('idRemoved');
$this->fail('The element was not deleted.');
} catch (PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
$this->assertEquals(PHPUnit_Extensions_Selenium2TestCase_WebDriverException::NoSuchElement, $e->getCode());
}
该代码取自 PHPUnit Selenium 测试代码中的第 1070 行,这是我在 Karna 为我指出正确方向后发现的。
对于那些迟到的人:更好的解决方案是创建自己的预期条件类并扩展Facebook'WebDriver'WebDriverExpectedCondition
以编写自己的方法:
public function elementNotPresent(WebDriverBy $by)
{
return new static(
function (WebDriver $driver) use ($by) {
try {
$driver->findElement($by);
return false;
} catch (Exception $e) {
return true;
}
}
);
}
更新:以上内容适用于Facebook的Selenium WebDriver绑定PHP。
Java 等效项将是
public boolean isElementExists(By by) {
boolean isExists = true;
try {
driver.findElement(by);
} catch (NoSuchElementException e) {
isExists = false;
}
return isExists;
}
如果您愿意,可以断言抛出特定异常:
/**
* @expectedException MyException
* @expectedExceptionMessage Some Message
*/
public function testExceptionHasRightMessage()
{
//yourCodeThatThrows new MyException('Some Message')
}