如何在 for 循环测试中使用 UI 验证 Excel 中的匹配值,并在范围报告中显示结果

问题描述

我正在将 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();
}