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

时间:2015-01-23 23:24:12

标签: java unit-testing selenium webdriver testng

我试图找到一种关闭弹出窗口的方法,即使断言失败,所以我的下一个测试可以从"主页"继续,换句话说,我在哪里离开了。

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

目前,如果断言失败,弹出窗口仍然打开,下一个测试无法找到需要与之交互的元素,因为该元素位于"主页面上。我愿意接受建议。我的目标是提供准确的测试结果,以避免误报是我使用断言的总体原因。

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

我的示例代码:

 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测试工具。

谢谢!

2 个答案:

答案 0 :(得分:1)

提出的建议都不是一个干净的解决方案:

  1. finally是关于使用语言构造而不是正确的单元测试机制
  2. 软断言实际上是关于收集多个错误并提供有意义的最终消息,这不是你的情况
  3. 正确的解决方案是清理单元测试框架生命周期方法中的资源(在TestNG @AfterMethod或类似的注释中)

答案 1 :(得分:0)

您可以使用softAssertion,请参阅此帖子以获取更多信息

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

要继续测试,您应该有恢复机制/初始化步骤(例如:返回登录页面)