在调用 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 更改应该应用以解决此问题。?
提供的代码中您的@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)。
我正在自动化一个网站,我正在使用软断言来使我的测试用例失败。但是现在我收到了所有测试方法的失败报告,这些测试方法是在特定场景中失败的测试方法之后出现的。下面给出的是示例代码
//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 更改应该应用以解决此问题。?
提供的代码中您的@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)。