Java 在JUnit参数化测试中,如何将数组作为测试参数传递?
我有一个字符串数组,对于数组中的每个字符串,我希望验证它是否显示在网页上,然后打开该链接。我不知道如何使我的测试成为参数化测试。非常感谢您的帮助,谢谢Java 在JUnit参数化测试中,如何将数组作为测试参数传递?,java,selenium,junit,Java,Selenium,Junit,我有一个字符串数组,对于数组中的每个字符串,我希望验证它是否显示在网页上,然后打开该链接。我不知道如何使我的测试成为参数化测试。非常感谢您的帮助,谢谢 package testCases; import junitparams.JUnitParamsRunner; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.
package testCases;
import junitparams.JUnitParamsRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.PageFactory;
import pageObjects.HomePage;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
/**
* Created by blah on 12/17/2015.
*/
@RunWith(value = JUnitParamsRunner.class)
public class ******
{
// Create Page Objects
HomePage hp;
WebDriver driver;
ArrayList<String> tableData = new ArrayList<String>();
// @Test
// @Parameters({something})
//
// public void test_add(String asdas) {
// hp.checkLink(asdas);
// }
@Before
public void setup()
{
// Configure Chrome Options
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Initialize Page Objects
hp = PageFactory.initElements(driver, HomePage.class);
}
// Pre Reqs
@Test
public void P1()
{
driver.get("the website I go to");
tableData= hp.readSystemTableData();
hp.checkLinks(tableData);
// hp.getTitle();
tearDown();
}
@After
public void tearDown()
{
driver.quit();
}
}
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at junitparams.internal.InvokeParameterisedMethod.evaluate(InvokeParameterisedMethod.java:211)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at junitparams.internal.ParameterisedTestMethodRunner.runMethodInvoker(ParameterisedTestMethodRunner.java:47)
at junitparams.internal.ParameterisedTestMethodRunner.runTestMethod(ParameterisedTestMethodRunner.java:40)
at junitparams.internal.ParameterisedTestClassRunner.runParameterisedTest(ParameterisedTestClassRunner.java:147)
at junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:414)
at junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:385)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
封装测试用例;
导入junitparams.JUnitParamsRunner;
导入org.junit.After;
导入org.junit.Before;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.chrome.ChromeDriver;
导入org.openqa.selenium.chrome.ChromeOptions;
导入org.openqa.selenium.support.PageFactory;
导入pageObjects.HomePage;
导入java.util.ArrayList;
导入java.util.concurrent.TimeUnit;
/**
*由blah于2015年12月17日创建。
*/
@RunWith(值=JUnitParamsRunner.class)
公共课******
{
//创建页面对象
主页惠普;
网络驱动程序;
ArrayList tableData=新的ArrayList();
//@测试
//@Parameters({something})
//
//公共无效测试添加(字符串asdas){
//hp.checkLink(asdas);
// }
@以前
公共作废设置()
{
//配置Chrome选项
ChromeOptions选项=新的ChromeOptions();
options.addArguments(“--disable extensions”);
驱动程序=新的色度驱动程序(可选);
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
//初始化页面对象
hp=PageFactory.initElements(驱动程序,HomePage.class);
}
//预需求
@试验
公共图书馆P1(
{
获取(“我去的网站”);
tableData=hp.readSystemTableData();
hp.checkLinks(tableData);
//hp.getTitle();
撕裂();
}
@之后
公共无效拆卸()
{
driver.quit();
}
}
java.lang.IllegalArgumentException:参数数目错误
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:47)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:44)
在junitparams.internal.InvokeParameterisedMethod.evaluate(InvokeParameterisedMethod.java:211)
位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
位于org.junit.internal.runners.statements.runafter.evaluate(runafter.java:27)
位于junitparams.internal.ParameterizedTestMethodRunner.runMethodInvoker(ParameterizedTestMethodRunner.java:47)
位于junitparams.internal.ParameterizedTestMethodRunner.runTestMethod(ParameterizedTestMethodRunner.java:40)
位于junitparams.internal.ParameterizedTestClassRunner.RunParameterizedTest(ParameterizedTestClassRunner.java:147)
位于junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:414)
位于junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:385)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:309)
位于org.junit.runner.JUnitCore.run(JUnitCore.java:160)
位于com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
位于com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
位于com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
您可以按如下方式执行参数化测试用例:
@RunWith(JUnitParamsRunner.class)
public class ****
{
// ..... code .....
public static final Object[] getTableData()
{
return new Object[][] {{data1},{data2},{data3}};
}
@Test
@Parameters(method = "getTableData")
public void p1(String tblData)
{
//.....code.....
hp.checkLinks(tblData);
//.....code.....
}
// .... code .....
}
这样试试。这可能有用。这是另一种方法。不清楚问题出在哪里-有大量关于如何使用参数化JUnit测试的文档;你被困在哪里了?@OliverCharlesworth试图按照文档进行操作,但我无法让它工作。也许我没有正确地添加它,如果我按原样运行我的测试,我会得到一个错误,说不匹配或参数(我在问题中添加了错误日志)你没有定义任何
@参数,那应该如何工作?@KirilS。我确实试过了,我只是注释掉了我的代码,在发布之前它不起作用。我确实定义了参数,那就是当我遇到错误时,我被卡住了,需要指导,所以我在这里发布了我的观点,要使用JUnitParamsRunner.class
,在测试中需要@parameters
,即:@test@parameters public void P1()