如何测试PHPUnit/Selenium不存在的元素


How can you test that an element does not exist with PHPUnit/Selenium?

我是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')
}