在调用 SoftAssertobj.assertAll() 函数后,SoftAssert 使我所有的测试方法都失败了

SoftAssert fails all my test methods after calling SoftAssertobj.assertAll() function

我正在自动化一个网站,我正在使用软断言来使我的测试用例失败。但是现在我收到了所有测试方法的失败报告,这些测试方法是在特定场景中失败的测试方法之后出现的。下面给出的是示例代码

    //Function Call 

    commFunction.backnavigation(driver, props,"Item",ExcelResult_Field, className,"CustomerPricing");

//Function Declaration

    public void backnavigation(WebDriver driver, Properties props,
            String MenuName, boolean TestStatus, String className,
            String MethodName) throws InterruptedException,
            EncryptedDocumentException, InvalidFormatException, IOException {



        Boolean bool_backButton = ValidationHelper.isElementPresent(driver,
                By.xpath(LocatorModule(props, "BackNavigationButton")));

        if (bool_backButton.equals(true)) {
            ExecutionHelper.ElementTobeClicked_Xpath(driver,
                    By.xpath(LocatorModule(props, "BackNavigationButton")));

          ListClassView = ExecutionHelper
                    .waitForElementVisible(
                            driver,
                            By.xpath("//ul[@id='settings_menu']//li/a[text()='"
                                    + MenuName
                                    + "']/ancestor::li/following-sibling::li[1]/ul/li"));

            if (ListClassView.equals(true)) {
                 writeResulttoExcel(TestStatus, className,
                        MethodName);
                  if(TestStatus!=true)
                  {
                        // softAssert.assertEquals(false, true,"TEST STATUS Fail--assert fail"); 
                      softAssert.fail("TEST STATUS Fail--assert fail");
                  }
            }

            else {
                Thread.sleep(3000);
                driver.findElement(
                        By.xpath(".//*[@id='settings_menu']/li[@class='left width_fluid']/a[text()='"
                                + MenuName + "']")).click();
                 writeResulttoExcel(false, className, MethodName);
                 //softAssert.assertEquals(false, true,"ListClassView FALSE--assert fail"); 
                   softAssert.fail("ListClassView FALSE--assert fail");
                 Thread.sleep(2000);
            }

            Thread.sleep(3000);
        }

        else {
            driver.navigate().back();
            Boolean ListClassView = ExecutionHelper
                    .waitForElementVisible(
                            driver,
                            By.xpath("//ul[@id='settings_menu']//li/a[text()='"
                                    + MenuName
                                    + "']/ancestor::li/following-sibling::li[1]/ul/li"));
            if (ListClassView.equals(true))
            {
                 writeResulttoExcel(false, className, MethodName);
                // softAssert.assertEquals(false, true,"BACK BUTTON FALSE LIST VIEW AVAILABLE--assert fail");

                   softAssert.fail("BACK BUTTON FALSE LIST VIEW AVAILABLE--assert fail");

            }

            else {
                Thread.sleep(3000);
                driver.findElement(
                        By.xpath(".//*[@id='settings_menu']/li[@class='left width_fluid']/a[text()='"
                                + MenuName + "']")).click();
                 writeResulttoExcel(false, className, MethodName);
            //   softAssert.assertEquals(false, true,"BACK BUTTON FALSE LIST VIEW NOT AVAILABLE--assert fail"); 
                 softAssert.fail("BACK BUTTON FALSE LIST VIEW NOT AVAILABLE--assert fail");

            }

            Thread.sleep(3000);
        }
       softAssert.assertAll();
    }

这里方法一在我的实际场景中应该会失败,方法二应该可以通过。但是在调用 softAssert.assertAll(); 之后方法 1 和 2 都失败了。附上场景的 TestNG 报告。客户定价后的测试应该失败,但报告显示所有测试方法得到 failed.What 更改应该应用以解决此问题。?

TestNG Report Image File

提供的代码中您的@Test 方法在哪里?您是在@Test 中调用预定义的反向导航方法吗?您在哪里创建 softAssert 对象?下面的简单示例将对您有所帮助。

  public class SoftAsert
{
@Test
public void test()
{
    SoftAssert asert=new SoftAssert();
    asert.assertEquals(false, true,"failed");
    asert.assertEquals(0, 1,"brokedown");
    asert.assertAll();
}
}

请在@Test 中自行启动 SoftAssert 对象,并在@Test 结束时使用 assertAll,以便它仅提供该特定测试的失败详细信息。

谢谢, 穆拉利

您需要在每个@Test 中声明和初始化SoftAssert 对象。但是,如果希望使用 HardAssert,则无需在每个 @Test 中声明和初始化 HardAssert。只需全局声明和初始化 Assert(每个测试一次 class)。