编辑:我的代码在异常处理期间不能使用catch块

时间:2015-09-21 11:57:03

标签: java selenium selenium-webdriver webdriver

EDITED

我稍微更改了我的代码,我的页面对象中有以下功能。

public void kenshoSearch(String searchTerm) throws Exception
{
    driver.findElement(kenshoSearchBox).sendKeys(searchTerm);
    try {
        new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(kenshoSearchVerify));
    }
    catch (NoSuchElementException e) {
        System.out.println("No Results Found");
    }   
}

当我对没有任何结果的关键字运行测试时,它应该打印出“No Results Found”,但实际上它会在控制台上抛出NoSuchElementException以及堆栈跟踪。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

实际上有两种方式:

1)。 您可以抓住NoSuchElementException并在短信中添加新的AssertException

2)。 你应该使用:

而不是捕获异常
List<WebElement> elements = getDriver().findElements(By.xpath("your xpath"));
Assert.assertTrue(elements.size()>0, "No Results found for \"Search Term\" ");

在这里,您尝试使用findElements代替findElement填充包含所有找到的元素的列表。如果findElements找不到任何WebElement,则不会引发异常。因此,如果找到元素,您可以通过列表的大小轻松检查。

答案 1 :(得分:0)

您可以将代码包装在try ... catch块中,并在捕获NoSuchElementException后处理断言:

try {    
    new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated("xpath of the div that contains the results"));
} catch (NoSuchElementException e) {
    // ...
}