在每个测试用例结束时,我通过调用以下代码来检查是否存在错误。我遇到的问题是,即使没有错误,代码也会抛出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){}
}
答案 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"));