在使用 TestNG 的测试方法上断言失败后,如何继续测试?

How do you continue the test after an assertion fails on a test method using TestNG?

我正在尝试找出一种方法来关闭弹出窗口 window,即使断言失败,这样我的下一个测试可以从 "main page" 继续,或者换句话说,我在哪里离开了。

工作流程如下: 主页 --> 弹出窗口 window(带有下面的断言和 driver.close)--> 主页

目前,如果断言失败,弹出窗口 window 保持打开状态,下一个测试无法找到它需要与之交互的元素,因为该元素位于 "main page" 上。我愿意接受建议。我的 objective 是为了提供准确的测试结果,因此避免误报是我使用断言的总体原因。

如果断言失败,您如何在测试方法结束时放置断言,但仍然完成其余步骤。

我的示例代码:

 try{

      WebDriverWait wait = new WebDriverWait(driver,5);
      WebElement Reportrunningalready = wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("btn")));

      System.out.println("Button found. Clicking it now."); 
      driver.findElement(By.name("btn")).click(); }

      catch(Throwable e){
      System.err.println("Button not found within the time.");  
      Assert.assertTrue(driver.getPageSource().contains("Your Report is complete."));


      driver.close();
      // change focus back to old tab
      driver.switchTo().window(oldTab);
      Thread.sleep(3000);

      }

旁注:我知道 getPageSource 不是最好的方法,但弹出窗口正文中确实有 5-10 个单词,所以它并不详尽。

我使用 TestNG 作为我的框架,Java 作为我的语言,Webdriver2 作为我的 Selenium 测试工具。

谢谢!

您可以使用 softAssertion,请参阅此post了解更多信息

http://seleniumexamples.com/blog/guide/using-soft-assertions-in-testng/

要继续测试,您应该恢复 mechanism/initialize 个步骤(例如:返回登录页面)

None 提出的是一个干净的解决方案:

  1. finally 是关于使用语言构造而不是正确的单元测试机制
  2. 软断言实际上是关于收集多个错误并提供有意义的最终消息,这也不是你的情况

正确的解决方案是清理单元测试框架生命周期方法中的资源(在 TestNG @AfterMethod 或类似的注释中)