Selenium 断言失败后如何继续测试执行?

Selenium 断言失败后如何继续测试执行?,selenium,selenium-webdriver,testng,assertions,Selenium,Selenium Webdriver,Testng,Assertions,我知道这个问题是重复的。但我在寻找昨天的结果。我没有任何解决办法。。 我使用SeleniumWebDriver 2.47.1和TestNG实现自动化。在我的自动化脚本中,我有12组测试&我使用testngassert方法来比较预期结果和实际结果。我的代码格式如下 @Test(priority = 6) public void TestingeNote1() { cd.switchTo().frame("RTop"); cd.manage().timeouts().implicitly

我知道这个问题是重复的。但我在寻找昨天的结果。我没有任何解决办法。。 我使用SeleniumWebDriver 2.47.1和TestNG实现自动化。在我的自动化脚本中,我有12组测试&我使用testngassert方法来比较预期结果和实际结果。我的代码格式如下

@Test(priority = 6)
public void TestingeNote1() {
   cd.switchTo().frame("RTop");
   cd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
   String TesteNote1 = cd.findElement(By.xpath("//table/tbody/tr[2]/td[5]")).getText();
   StringBuffer object1 = new StringBuffer(TesteNote1);
   String ActeNote1 = object1.substring(108);
   String ExpeNote1 = ex.getExcelValue(scenarioName, 75, 4);
   try {
       Assert.assertEquals(ExpeNote1, ActeNote1);
       ex.setExcelValue(scenarioName, 75, 8, "PASSED");
   }
   catch(Exception e) {
         ex.setExcelValue(scenarioName, 75, 8, "FAILED");
   }
   cd.switchTo().defaultContent();
}

一旦断言失败,测试脚本的执行就会停止。我想在断言失败后继续执行。我还使用了Verify(),它只给出传递的Verify结果。但是上面的测试结果是失败的。

我建议使用try/finally块

。 .


使用带有适当异常捕捉器的try catch块。例如,当您尝试捕获正常异常时,请在catch块中使用
exception
,如果元素不在DOM中,请使用
NoSuchElementException
等。。。在您的情况下,捕获您在错误控制台中得到的异常。以下是如何-

  try {
       Assert.assertEquals(ExpeNote1, ActeNote1);
       ex.setExcelValue(scenarioName, 75, 8, "PASSED");
   }
   catch(AssertionError e) {
       ex.setExcelValue(scenarioName, 75, 8, "FAILED");
   }

您的执行停止,因为您没有捕获assert语句抛出的正确异常。我猜您将得到一个断言错误,如果不替换您从上面的代码中获得的异常类型的话。希望这有帮助。

使用软断言。即使一个断言失败,它仍将继续测试

SoftAssert softAssert = new SoftAssert();
String ActualErrorMEssage = firstNameerrorXpath.getText;
String ActualErrorMEssage2 = secondNameNameerrorXpath.getText;
softAssert.assertEquals(ActualErrorMEssage,ExpectedErrorMEssage);
softAssert.assertEquals(ActualErrorMEssage2,ExpectedErrorMEssage);
softAssert.assertAll();

我也试过试过了。。断言失败后,测试本身停止。这不是继续执行……这对我有用。谢谢。。使用上述代码时不执行catch块。Excel未更新为特定测试的失败测试结果如果您的问题是匹配2个字符串,则只需使用IF条件,即可解决您的问题。使用上述代码时,我得到eclipse输出,即测试运行:12,失败:1,跳过:0。这才是我真正需要的。但是在这种情况下,excel没有更新任何值。阅读一些博客,我得出结论,断言(硬)在任何测试方法中都会失败,该特定测试方法的剩余执行将被中止。现在,如果您想在断言失败的情况下继续剩余的测试部分执行,并且还想在testng结果报告中报告断言失败,那么您可以使用testng软断言方法。当您尝试断言它时,您会得到什么错误?在使用上述代码时,Excel更新了测试结果为失败。但是Eclipse的输出是
测试运行:12,失败:0,跳过:0
。测试没有失败。它只是将测试显示为PassedRight,而不会显示为捕获异常时失败。如果您仍然希望它失败,那么您可以自己抛出一个新异常,而不在catch()块中捕获它,因为您需要执行catch块。
SoftAssert softAssert = new SoftAssert();
String ActualErrorMEssage = firstNameerrorXpath.getText;
String ActualErrorMEssage2 = secondNameNameerrorXpath.getText;
softAssert.assertEquals(ActualErrorMEssage,ExpectedErrorMEssage);
softAssert.assertEquals(ActualErrorMEssage2,ExpectedErrorMEssage);
softAssert.assertAll();