如何使用PHPUnit / Selenium测试元素不存在?

时间:2014-04-01 08:23:28

标签: php testing selenium phpunit

我是PHPUnit和Selenium的新手,我想测试一下'删除'通过在单击按钮之前确认具有给定ID的元素存在,但在单击该按钮后不再存在该按钮。

如果我使用类似的东西来检查元素是否已被删除:

$this->assertFalse($this->byId('idRemoved'));

然后我在byId()中遇到测试失败,因为它无法找到idRemoved(这是真的,因为它不存在。)

如何测试缺少元素,如果找到idRemoved则测试失败?

4 个答案:

答案 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')
}