如果在测试运行期间任何一个测试步骤抛出一个异常,比如nosuchelementexception,那么我希望testng测试(@test)失败(举个例子)
在当前场景中,我正在检查是否单击某个特定任务,然后ui上的某个元素中会出现一些文本。但是最近aut在单击任务时抛出了一个网络错误,因此包含我正在验证的文本的元素没有出现在ui上。所以webdriver抛出了nosuchelementexception。但是由于我所有的Assert都在测试步骤的后面部分,testng将这个测试标记为pass,因此也继续执行依赖的测试用例。
那么,如果测试中的所有步骤都没有执行,或者抛出了任何异常,那么有没有办法使测试失败呢?
以下是示例代码:
public class DummyTest {
@Test
public void testThis(){
try{
testThisSteps();
}catch(Exception e){
e.printStackTrace();
}
}
public void testThisSteps() throws Exception{
System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://toolsqa.com/automation-practice-form/");
driver.manage().window().maximize();
driver.findElement(By.xpath("//h1[text()='Practice Automation']"));
int i = driver.findElements(By.name("firstname")).size();
Assert.assertTrue(i!=0,"Element does not exist even though page is loaded");
}
}
现在的问题是,如果webdriver找不到元素,在这个例子中,我故意在maximuze代码之后遗漏了一些文本,它将抛出nosuchelementexeception,并且不会执行进一步的代码,这将导致Assert没有得到评估,并且测试用例的执行将停止,而更多的测试用例依赖于这个获取执行。这是死刑result:-
org.openqa.selenium.nosuchelementexception:没有这样的元素:找不到元素:{“method”:“xpath”,“selector”:“//h1[text()='practice automation']”
***元素信息:{using=xpath,value=//h1[text()='practice automation']
默认套件
运行的测试总数:1,失败数:0,跳过数:0
进程已完成,退出代码为0
3条答案
按热度按时间twh00eeo1#
这个问题实际上取决于op所要求的行为。
您的选项是:a)对未能出现在ui上的元素添加另一个Assert(可能不理想,因为您希望验证针对给定原因而不是单个元素的测试,即成功登录而不是“单击登录按钮”
b) 使用testng注解来控制流和所需的行为
dependsOnMethods="yourMethodContainingTheElementThatOccassionallyAppears"
c) 避免捕获异常,这样testng将使该步骤失败(如果您也使用解决方案(b),则将跳过其余的测试(用黄色表示)d) 捕获seleniumnoementexception,然后对try/catch块中的elementpresent进行Assert。通过相应地调整依赖关系,您可以决定是希望脚本持久化还是跳过其余步骤。
e) 使用softassertion(意思是如果元素在将来不再出现,那么测试不会失败,而是继续运行其余的步骤)
希望这有帮助!
1qczuiv02#
我怀疑测试中的代码,被
try-catch
阻止。如果你加上throws Exception
方法定义和否try-except
,您可以得到标记为Fail
,而不是Pass
当任何异常从Assertions
.我尝试了以下代码
NoSuchElementException
(模拟你的问题):这里,作为具有类名的元素
"something"
不存在,抛出NoSuchElementException
.Assert.assertEquals
未执行。testng将其标记为
Failed
. 这是你期望的行为吗?以下是完整的日志:
lmvvr0a83#
试试这个:
这是一个廉价的黑客方式做什么,你正在尝试,但它会工作,并Assert将触发。
此外,try-catch块也是测试没有失败的原因。你抓住了考试的失败,就是在处理它
抓住你就等于迫使考试通过。