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

Java 如何使用DataProvider从多个excel工作表中读取值并将其传递给multiple@test?,java,selenium,webdriver,testng,Java,Selenium,Webdriver,Testng,我正在使用Selenium/Java/TestNG自动化web应用程序。 该应用程序在主页中有数据,@dataProvider正在从excel工作表中读取数据。基于主页中的一些条件,我想从同一excel文件中的其他工作表中获取数据,并将其传递到同一类中相应的@test中。尝试了许多选择,但未能找到合适的解决方案 先谢谢你, Resh这里有一种方法可以做到这一点 基本上,您可以将excel电子表格的“工作表”名称作为属性注入当前标记的上下文,即ITestContext,然后从@DataProvid

我正在使用Selenium/Java/TestNG自动化web应用程序。 该应用程序在主页中有数据,@dataProvider正在从excel工作表中读取数据。基于主页中的一些条件,我想从同一excel文件中的其他工作表中获取数据,并将其传递到同一类中相应的@test中。尝试了许多选择,但未能找到合适的解决方案

先谢谢你,
Resh

这里有一种方法可以做到这一点

基本上,您可以将excel电子表格的“工作表”名称作为属性注入当前
标记的上下文,即
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 <test> 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"}
                };

        }
    }
}

作为一种方法,您可以尝试将特定的工作表复制或移动到excel工作表中,更具体地说,复制或移动到工作簿中

我会这样做:

@DataProvider(name = "Datos")
 public Object[][] dataProvider(Method m) throws Exception {
    String hoja = m.getName();
    String archivo = "";
    archivo = readParametersFile("Parameters.json", "ExcelWorkbook", "Folders");
    Object[][] prueba = Excel.getTestData(archivo, hoja);
    return prueba;
}

我有一个包含许多页面的excel,excel数据表的名称与@Test方法相同,我有一个读取文件和数据表的getTestData方法。

Hello!这个问题可能过于宽泛,无法给出任何有意义的答案。您可能希望将问题简化为尝试执行此操作时遇到的特定问题,并参考。祝你好运请参阅:SO的期望是,用户提问时不仅要进行研究以回答自己的问题,还要分享研究、代码尝试和结果。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见:非常感谢您的输入。这个概念正是我想在我的框架中实现的。我不想移动/复制工作表,因为主工作表将变得太大而无法维护。谢谢你的建议