Selenium - NoSuchElementException 错误检查

Selenium - NoSuchElementException error checking

在每个测试用例的末尾,我通过调用以下代码检查是否存在错误。我遇到的问题是,即使不存在错误,代码也会抛出 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){}
}

问题是该元素不存在并且 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
} 

您还可以创建一种按 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"));