使用包含通配符的Assert(Selenium Webdriver)

时间:2015-04-28 13:41:02

标签: java selenium webdriver testng assert

我试图使用webdriver检查网页上是否存在某些内容(在用户删除之后)。

我使用try-catch方法来处理NoSuchElementException,但在' catch'我希望能够断言NoSuchElementException包含文本" NoSuchElementException",并在异常的其余部分使用通配符(因为异常中的其他细节每次都会更改)

这里有一些代码看起来像什么,你可以看到我已经尝试使用*作为外卡来表明异常后没有任何事情对我来说很重要,我只想要它检查异常是否正确,并根据以下内容通过测试:

catch (NoSuchElementException e1)
{
    Assert.assertEquals(e1, "org.openqa.selenium.NoSuchElementException: *");
}  

3 个答案:

答案 0 :(得分:3)

您正在捕获NoSuchElementException并且在catch块中,您正在检查它是否是NoSuchElementException,它不会添加任何值。您正在测试JDK是否正常工作。

要检查页面上是否不存在该元素,您可以使用如下方法:

public boolean isElementPresent(By locatorKey) {
    try {
          driver.findElement(locatorKey);
          return true;
        } catch (org.openqa.selenium.NoSuchElementException e) {
          return false;
        }
}

然后你应该断言上面的方法,

如果元素不存在

Assert.assertFalse(isElementPresent(By.id("login")));

如果元素应该存在

Assert.assertTrue(isElementPresent(By.id("login")));

答案 1 :(得分:0)

我假设您正在使用TestNG断言。如果是这样,我会使用contains来搜索部分匹配。

assertTrue(e1.getClass().toString.contains("org.openqa.selenium.NoSuchElementException:"));

答案 2 :(得分:0)

感谢LINGS,这真的很有帮助。我实际上将所有findelement方法存储在另一个类/包中,类似于PageObject模型,那么我将如何做到这一点,并考虑到这一点?我尝试了以下但是似乎没有工作。这里我使用Documents.file1指向xpath我试图断言为false,而Driver.driver是IEDriver类:

public boolean isElementPresent(Documents.file1(Driver.driver)) {
    try {
        Documents.file1(Driver.driver);
        return true;
        } catch (org.openqa.selenium.NoSuchElementException e) {
        return false;
        }
    Assert.assertFalse(isElementPresent(Documents.file1(Driver.driver)));
}