问题描述
我正在将 Selenium 与 JUnit 一起使用,我需要从 Excel 工作表中针对 UI 值验证参考编号和数量,从第 8 步开始,在给定的 for 循环中。
目前它在我在 for 循环中使用的方法中进行了验证,我们可以检查系统日志,但我需要在范围报告中进行相同的验证。
我已经在使用下面的范围报告,但是即使日志不同,它也显示所有测试都通过了,只是因为没有断言。
总结: 如何插入断言以检查 FOR LOOP 中的值并使它们在范围报告中通过和失败。
public class TestCase extends AppTest {
private StringBuffer verificationErrors = new StringBuffer();
@Override
@Before
public void setUp() throws Exception {
super.setUp();
preparation = new Prep();
application = new AppTotest();
user = new Environment();
}
@Test
public void testLAP_Creamix() throws Exception {
try {
launchMainApplication();
Test_frMain Test_frMainPage = new Test_frMain(tool,test,user,application);
HashMap<String,ArrayList<String>> win = CreamixWindowsDataset.main();
SortedSet<String> keys = new TreeSet<>(win.keySet());
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter("Test_Report.html");
ExtentReports extent = new ExtentReports();
extent.attachReporter(htmlReporter);
ExtentTest test1 = extent.createTest("Creamix test");
for (String i : keys) {
System.out.println("########### Test = " + win.get(i).get(0) + " ###########");
Lapeyre_frMainPage.EnterTaille(win.get(i).get(1));
Lapeyre_frMainPage.SelectCONfigURATION(win.get(i).get(2));
Lapeyre_frMainPage.SelectPLANVASQUE(win.get(i).get(3));
Lapeyre_frMainPage.SelectCOULEUR(win.get(i).get(4));
Lapeyre_frMainPage.SelectPOIGNEES(win.get(i).get(5));
Lapeyre_frMainPage.SelectTYPE_DE_MEUBLE(win.get(i).get(6));
Lapeyre_frMainPage.SelectCHOISISSEZ(win.get(i).get(7));
Lapeyre_frMainPage.VerifyREFERENCE(win.get(i).get(8));(FROM HERE Validation Starts)
Lapeyre_frMainPage.VerifyQUANTITY(win.get(i).get(9));
Lapeyre_frMainPage.VerifyREFERENCETwo(win.get(i).get(10));
Lapeyre_frMainPage.VerifyQUANTITYTwo(win.get(i).get(11));
Lapeyre_frMainPage.VerifyREFERENCEThree(win.get(i).get(12));
Lapeyre_frMainPage.VerifyQUANTITYThree(win.get(i).get(13));
Lapeyre_frMainPage.VerifyREFERENCEFour(win.get(i).get(14));
Lapeyre_frMainPage.VerifyQUANTITYFour(win.get(i).get(15));
Lapeyre_frMainPage.VerifyREFERENCEFive(win.get(i).get(16));
Lapeyre_frMainPage.VerifyQUANTITYFive(win.get(i).get(17));
Lapeyre_frMainPage.VerifyREFERENCESix(win.get(i).get(18));
Lapeyre_frMainPage.VerifyQUANTITYSix(win.get(i).get(19));
Lapeyre_frMainPage.VerifyREFERENCESeven(win.get(i).get(20));
Lapeyre_frMainPage.VerifyQUANTITYSeven(win.get(i).get(21));
Lapeyre_frMainPage.VerifyPanierPrice(win.get(i).get(22));
Lapeyre_frMainPage.VerifyECO_PARTPrice(win.get(i).get(23));
Lapeyre_frMainPage.ClickCREAMIXReinit();(Reset button to test next scenario)
test1.pass("Scenario " + win.get(i).get(0) + " is passed");
System.out.println("########### Test End ##############");
extent.flush();
}
test.setResult("pass");
} catch (AlreadyRunException e) {
} catch (Exception e) {
verificationErrors.append(e.getMessage());
throw e;
}
}
@Override
@After
public void tearDown() throws Exception {
super.tearDown();
}
}
解决方法
鉴于您当前的代码,我建议您将所有 .VerifyX()
方法替换为 .GetX()
方法,并在脚本中断言这两个值。例如,
Lapeyre_frMainPage.VerifyREFERENCE(win.get(i).get(8));
将改为
assertEquals("Verify REFERENCE 1",win.get(i).get(8),Lapeyre_frMainPage.GetREFERENCE());
.GetREFERENCE()
会从 UI 返回值,而不是进行验证。
为此,您需要更改每个 VerifyX()
方法以从 UI 返回字符串。根据您在评论中的代码,这是一个示例。
public void GetREFERENCE()
{
return tool.searchUsingXPath("//tbody//tr[1]//td//div[2]").getText().trim();
}