我是PHPUnit和Selenium的新手,我想测试一下'删除'通过在单击按钮之前确认具有给定ID的元素存在,但在单击该按钮后不再存在该按钮。
如果我使用类似的东西来检查元素是否已被删除:
$this->assertFalse($this->byId('idRemoved'));
然后我在byId()
中遇到测试失败,因为它无法找到idRemoved
(这是真的,因为它不存在。)
如何测试缺少元素,如果找到idRemoved
则测试失败?
答案 0 :(得分:3)
这是我最终使用的,感谢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());
}
代码来自line 1070 in the PHPUnit Selenium test code,我在Karna指出正确的方向后找到了这个代码。
答案 1 :(得分:2)
对于那些迟到的人来说:更好的解决方案是创建自己的预期条件类并扩展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 bindings for PHP
答案 2 :(得分:0)
Java等价物将是
public boolean isElementExists(By by) {
boolean isExists = true;
try {
driver.findElement(by);
} catch (NoSuchElementException e) {
isExists = false;
}
return isExists;
}
答案 3 :(得分:0)
如果您愿意,可以声明会抛出特定的异常:
/**
* @expectedException MyException
* @expectedExceptionMessage Some Message
*/
public function testExceptionHasRightMessage()
{
//yourCodeThatThrows new MyException('Some Message')
}