Java Selenium能否在测试(Assert.assertEquals())失败时截图?
我对Selenium还不熟悉,当Assert equals失败时,我一直在用Selenium截图。我正在使用TestNG 当testcase在服务器端失败时,它需要截图一个页面,这样我就可以确切地知道哪里出了问题 我将代码包装在try-catch块中,并在catch中截图 当看到selenium问题(例如元素不可见、无法单击元素)时,屏幕截图功能会起作用 但是对于Assert.equals(),这是失败的。当Assert.assertEquals()失败时,我希望它会捕获并截图。有人能澄清我的疑问吗 下面是代码片段,我是如何尝试实现这一点的:Java Selenium能否在测试(Assert.assertEquals())失败时截图?,java,selenium-webdriver,testng,Java,Selenium Webdriver,Testng,我对Selenium还不熟悉,当Assert equals失败时,我一直在用Selenium截图。我正在使用TestNG 当testcase在服务器端失败时,它需要截图一个页面,这样我就可以确切地知道哪里出了问题 我将代码包装在try-catch块中,并在catch中截图 当看到selenium问题(例如元素不可见、无法单击元素)时,屏幕截图功能会起作用 但是对于Assert.equals(),这是失败的。当Assert.assertEquals()失败时,我希望它会捕获并截图。有人能澄清我的疑
try {
Assert.assertEquals(expected,actualoutput,message) //it fails
}
catch {
Selenium taking screenshot // iam not able to take screenshot
}
虽然这些评论是正确的,但我为您提供了一种变通方法—将
Assert
更改为if
:
if (!message.equals(expected)){
takeScreenshot(outputfile.jpg);
}
您可能正在捕获异常,而Assert在失败时抛出错误 然而,我认为testng为您提供了其他钩子,您可以在其中共享在测试中截图失败的逻辑 实现这一点的一种方法是将截图代码放入ITestListener接口提供的onTestFailure中。这样可以避免将所有验证放在try-catch块中
最近TestNG还添加了一些。您也可以尝试探索一下。我建议使用注释
@AfterMethod
,如果结果失败,则调用@Override
方法缩短屏幕
@AfterMethod
public void onTestFailure(ITestResult testResult) throws IOException {
if(testResult.getStatus() == ITestResult.FAILURE){
System.out.println(testResult.getStatus());
}
@Override
public void onTestFailure(ITestResult result) {
System.out.println("***** Error " + result.getName()
+ " test has failed *****");
<Code and Logic>
}
@AfterMethod
public void onTestFailure(ITestResult testResult)引发IOException{
if(testResult.getStatus()==ITestResult.FAILURE){
System.out.println(testResult.getStatus());
}
@凌驾
公共void onTestFailure(ITestResult结果){
System.out.println(“******错误”+result.getName()
+“测试失败****”;
<代码和逻辑>
}
你能把整个片段放进去吗?