Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的参数在TestNG中重复整个测试类_Java_Selenium_Webdriver_Testng_Testng Dataprovider - Fatal编程技术网

Java 使用不同的参数在TestNG中重复整个测试类

Java 使用不同的参数在TestNG中重复整个测试类,java,selenium,webdriver,testng,testng-dataprovider,Java,Selenium,Webdriver,Testng,Testng Dataprovider,我有这段代码用于使用SeleniumWebDriver测试站点。有四种@Test方法和一个带有三个值的@DataProvider。因此,总共运行了12个测试 public class SomeTest { WebDriver driver; @DataProvider(name = "URLs") public Object[][] createData1() { return new Object[][] { {"url 1"},

我有这段代码用于使用SeleniumWebDriver测试站点。有四种
@Test
方法和一个带有三个值的
@DataProvider
。因此,总共运行了12个测试

public class SomeTest {

    WebDriver driver;

    @DataProvider(name = "URLs")
    public Object[][] createData1() {
     return new Object[][] {
       {"url 1"},
       {"url 2"},
       {"url 3"}};
    }

    @BeforeMethod
    //right now I'm just setting up weddriver for chrome, but 
    //I'll need to run this test for firefox, chrome, and IE
    public void setUpWebDriver(){
        driver = WebDrivers.getChromeDriver();
    }

    @AfterMethod
    public void closeWebDriver(){
        driver.quit();
    }   

    //test methods below

    @Test(dataProvider = "URLs")
    public void test1(String url){
        //test 1 with url
    }

    @Test(dataProvider = "URLs")
    public void test2(String url){
        //test 2 with url
    }

    @Test(dataProvider = "URLs")
    public void test3(String url){
        //test 3 with url
    }

    @Test(dataProvider = "URLs")
    public void test4(String url){
        //test 4 with url
    }

}

目前,这些测试正在Chrome下运行。但我还想在Firefox和Internet explorer上重复所有这些测试,以及所有数据提供程序的变体。我怎样才能让整个类的测试对这些其他Web驱动程序重复?这几乎就像我需要一个用于整个类的
@DataProvider
(用于before方法)。

我希望您是从TestNG.xml文件运行测试用例。如果是,您可以使用TestNG提供的
参数
,并配置TestNG.xml文件以运行测试用例,如下所示

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" verbose="1" >
    <test name="Internet Explorer Test" >
        <parameter name="browser" value="IE">
        <classes>
            <class name="com.somePackage.SomeTest" />
        </classes>
    </test>

    <test name="Firefox Test" >
        <parameter name="browser" value="FF">
        <classes>
            <class name="com.somePackage.SomeTest" />
        </classes>
    </test>

    <test name="Chrome Test" >
        <parameter name="browser" value="CH">
        <classes>
            <class name="com.somePackage.SomeTest" />
        </classes>
    </test>
</suite>
你应该使用一个


当我在web应用程序测试项目中使用Selenium+TestNG时,我也遇到了同样的问题。我在TestNG邮件列表上寻求帮助并收到了一些,但我从未找到一个我真正喜欢的解决方案。这是我一直在寻找的,但是如果我有带参数的测试构造函数,我会得到一个
java.lang.reflect.InvocationTargetException;嵌套异常为java.lang.reflect.InvocationTargetException:null
。您应该提供完整的堆栈跟踪。
@BeforeMethod
@Parameters{"browser"}
public void setUpWebDriver(String  browser){
    if (browser.equals("IE"))
        driver = WebDrivers.getIEDriver();
    else if (browser.equals("FF"))
        driver = WebDrivers.getFireFoxDriver();
    else if (browser.equals("CH"))
        driver = WebDrivers.getChromeDriver();
}
public class SomeTest {

    @Factory
    public Object[] createInstances() {
        Object[] result = new Object[]{            
            new SomeTest(WebDrivers.getChromeDriver())
            // you can add other drivers here
        };
        return result;
    }

    private final WebDriver driver;

    public SomeTest(WebDriver driver) {
        this.driver = driver
    }

    @DataProvider(name = "URLs")
    public Object[][] createData1() {
     return new Object[][] {
       {"url 1"},
       {"url 2"},
       {"url 3"}};
    }    

    @AfterClass
    public void closeWebDriver(){
        driver.quit();
    }   

    //test methods below

    @Test(dataProvider = "URLs")
    public void test1(String url){
        //test 1 with url
    }

    @Test(dataProvider = "URLs")
    public void test2(String url){
        //test 2 with url
    }

    @Test(dataProvider = "URLs")
    public void test3(String url){
        //test 3 with url
    }

    @Test(dataProvider = "URLs")
    public void test4(String url){
        //test 4 with url
    }

}