如何使用DataProvider从多个Excel工作表中读取值并将其传递给多个@test?

时间:2017-07-25 21:51:28

标签: java selenium webdriver testng

我正在使用Selenium / Java / TestNG自动化Web应用程序。 应用程序在主页面中包含数据,并且正由@dataProvider从Excel工作表中读取。基于主页面中的一些标准,我想从同一个excel文件中的其他工作表中获取数据,并将其传递到同一个类中的相应@test。尝试了很多选项,但无法找到合适的解决方案。

非常感谢, RESH

2 个答案:

答案 0 :(得分:1)

以下是实现这一目标的一种方式。

你基本上注入&#34;表&#34;您的Excel电子表格的名称在当前<test>代码的上下文中,ITestContext作为属性,然后从@DataProvider带注释的数据提供程序中,您基本上将此属性读取为决定必须阅读哪张。

以下示例演示了执行此操作的两个@Test方法,其中第一个@Test方法将此属性作为执行流的一部分和第二个@Test方法(它必须现在由动态数据提供商提供支持,只需消耗数据。

import org.testng.ITestContext;
import org.testng.Reporter;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class SampleTestClass {
    /**
     * This method is simulating the master test method which would interact with
     * the web app and bring the application to a state wherein the next test method
     * should take over and interact.
     */
    @Test
    public void testLogin() {
        //Simulating toggling between multiple flows.
        int whichFlow = Integer.parseInt(System.getProperty("flow", "1"));
        Reporter.getCurrentTestResult().getTestContext().setAttribute("flow", whichFlow);
    }

    /**
     * This method is intentionally dependent on "testLogin" because its "testLogin" that will
     * first interact with the web application and bring the application to the place from where
     * further interaction is required, but which will vary based on some "x" criteria
     * The "x" criteria is now available as an attribute in the current &lt;test&gt; tag's
     * context.
     */
    @Test(dependsOnMethods = "testLogin", dataProvider = "getData")
    public void testSomethingElse(int a, String b) {
        //Real test method logic goes here.
        System.out.println(a + ":" + b);

    }

    @DataProvider
    public Object[][] getData(ITestContext context) {
        int whichFlow = Integer.parseInt(context.getAttribute("flow").toString());
        switch (whichFlow) {
            case 1:
                return new Object[][]{
                        {1, "Login"},
                        {2, "Signup"}
                };
            case 2:
                return new Object[][]{
                        {100, "Fees"},
                        {200, "Charges"}
                };

            case 3:
            default:
                return new Object[][]{
                        {900, "Logout"},
                        {1000, "Random"}
                };

        }
    }
}

答案 1 :(得分:0)

只是一种方法,您可以尝试将特定工作表复制或移动到Excel工作表中,更具体地说,移植到工作簿中。