Java 如何使用DataProvider从多个excel工作表中读取值并将其传递给multiple@test?
我正在使用Selenium/Java/TestNG自动化web应用程序。 该应用程序在主页中有数据,@dataProvider正在从excel工作表中读取数据。基于主页中的一些条件,我想从同一excel文件中的其他工作表中获取数据,并将其传递到同一类中相应的@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
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的期望是,用户提问时不仅要进行研究以回答自己的问题,还要分享研究、代码尝试和结果。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见:非常感谢您的输入。这个概念正是我想在我的框架中实现的。我不想移动/复制工作表,因为主工作表将变得太大而无法维护。谢谢你的建议