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