Selenium - NoSuchElementException错误检查

时间:2015-02-05 15:01:07

标签: java selenium exception-handling selenium-webdriver

在每个测试用例结束时,我通过调用以下代码来检查是否存在错误。我遇到的问题是,即使没有错误,代码也会抛出NoSuchElementException并且测试用例将失败。如果出现错误,则测试用例将通过。

如何修改我的代码,如果没有错误,测试将通过,如果出现错误,测试用例将失败。

public static void chk_ErrorIsNotEnabled()
{
    try
    {
        element = driver.findElement(By.id("ctl00_Content_ulErrorList"));
        if(element.getText().equals(""))
        {
            Log.info("Warning error is not dispayed." ); // The test should pass if element is not found
        }
        else
        {
            Log.error("Warning error is dispayed when it shouldnt be.");
        } //The test should fail if element is found
    }
    catch (NoSuchElementException e){}
}

2 个答案:

答案 0 :(得分:2)

问题是元素不存在且selenium抛出NoSuchElement个异常最终会捕获catch块,而您的代码期望具有此ID ctl00_Content_ulErrorList的元素。您无法在不存在的元素上获取文本。

一个好的测试将如下所示: 请注意findElements()。它应该找到带有错误列表的元素的size。如果大于0,则表示错误输出并且测试失败

if(driver.findElements(By.id("ctl00_Content_ulErrorList")).size() > 0){
    Log.error("Warning error is dispayed when it shouldnt be.");
}else{
    //pass
    Log.info("Warning error is not dispayed." ); // The test should pass if element is not found
} 

答案 1 :(得分:0)

您还可以创建一个按ID导航的方法,每次都会重复使用,简单的断言可以解决您的问题

private WebElement currentElement;    

public boolean navigateToElementById(String id) {
    try {
        currentElement = currentElement.findElement(By.id(id));
    } catch (NoSuchElementException nsee) {
        logger.warn("navigateToElementById : Element not found with id  : "
                + id);
        return false;
    }
    return true;
}    

然后每次测试时都可以使用:

assertTrue(navigateToElementById("your id"));