我正在使用Selenium / Java / TestNG自动化Web应用程序。 应用程序在主页面中包含数据,并且正由@dataProvider从Excel工作表中读取。基于主页面中的一些标准,我想从同一个excel文件中的其他工作表中获取数据,并将其传递到同一个类中的相应@test。尝试了很多选项,但无法找到合适的解决方案。
非常感谢, RESH
答案 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 <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"}
};
}
}
}
答案 1 :(得分:0)
只是一种方法,您可以尝试将特定工作表复制或移动到Excel工作表中,更具体地说,移植到工作簿中。