Java 如何替换数据提供程序中的硬编码值

Java 如何替换数据提供程序中的硬编码值,java,selenium,testng,dataprovider,Java,Selenium,Testng,Dataprovider,我正在寻找从中删除(替换)硬编码浏览器/OS/版本值的建议 @DataProvider公共静态对象[][]sauceBrowserDataProvider。代码示例: @DataProvider(name = "hardCodedBrowsers", parallel = true) public static Object[][] sauceBrowserDataProvider(Method testMethod) { return new Object[][]{

我正在寻找从中删除(替换)硬编码浏览器/OS/版本值的建议 @DataProvider公共静态对象[][]sauceBrowserDataProvider。代码示例:

    @DataProvider(name = "hardCodedBrowsers", parallel = true)
    public static Object[][] sauceBrowserDataProvider(Method testMethod) {
    return new Object[][]{

            **new Object[]{"firefox", "55.0", "Windows 10"},
            new Object[]{"chrome", "65.0", "Windows 10"},**

    };}


@Test( dataProvider = "hardCodedBrowsers")

    public void createDriver(String browser, String version, String os)
        throws Exception {
        Class<? extends TestRemote> SLclass = this.getClass();

        DesiredCapabilities capabilities = new DesiredCapabilities();

        // set desired capabilities to launch appropriate browser on Sauce
        capabilities.setCapability(CapabilityType.BROWSER_NAME, browser);
        capabilities.setCapability(CapabilityType.VERSION, version);
        capabilities.setCapability(CapabilityType.PLATFORM_NAME, os);    

        capabilities.setCapability("seleniumVersion", "3.8.1");
        capabilities.setCapability("name", SLclass.getSimpleName());
        capabilities.setCapability("screenResolution", "1920x1080");

        driver = (new RemoteWebDriver(new URL("http://" + SAUCE_USERNAME + ":" + SAUCE_ACCESS_KEY + "@ondemand.saucelabs.com:80/wd/hub"), capabilities));

       configRead = new ConfigFileReader();

       propertyRead = new PropertyLoader();

       baseUrl = propertyRead.getProperty("site.url");

       app = new Application(driver);

       getURL();

    }
@DataProvider(name=“hardCodedBrowsers”,parallel=true)
公共静态对象[][]sauceBrowserDataProvider(方法testMethod){
返回新对象[][]{
**新对象[]{“firefox”、“55.0”、“Windows 10”},
新对象[]{“chrome”、“65.0”、“Windows 10”}**
};}
@测试(dataProvider=“hardCodedBrowsers”)
公共void createDriver(字符串浏览器、字符串版本、字符串操作系统)
抛出异常{

类最简单的方法是将组合(浏览器/OS/版本)移动到数据源,如excel电子表格、csv或json/yaml/xml,并让您的
@DataProvider
从那里读取它们

更新

  • 如何读取JSON文件:
  • 如何读取XML文件:
您可以利用。It提供程序不同,可以从不同的数据源(如xml、json、excel、属性、数据库)加载测试数据。使用QAF,您可以设置不同的数据源,如下所示:

@QAFDataProvider (dataFile = "resources/data/logintestdata.csv")
@QAFDataProvider(dataFile = "resources/data/testdata.xls")
@QAFDataProvider(dataFile = "resources/data/testdata.xls", sheetName="login")
@QAFDataProvider(dataFile = "resources/data/testdata.xls", key="login") //excel with data table
@QAFDataProvider(dataFile = "resources/data/logintestdata.json")
@QAFDataProvider(key="login.data") //xml key
@QAFDataProvider(sqlQuery = "select col1, col2 from tbl") // database
@QAFDataProvider(dataFile = "resources/data/logintestdata.txt")

除此之外,它还具有许多用于web、mobile(使用selenium、appium)黑盒测试的功能和web服务。

您介意建议如何让数据提供程序读取json或xml文件吗?@Y_Sh-我已经编辑了我的答案,并包含了可以帮助您学习这些内容的链接。如果您的问题得到了回答,请继续接受我的答案。谢谢!还有一个问题:如果通过其他测试类扩展此类,请回答(例如Login类),如何使selenium也从Login类运行测试方法。当前它仅从dataprovider所在的类(基本类)@Y_Sh运行测试方法,这是不正确的。TestNG默认情况下运行所有方法(驻留在当前类中的方法和从基类继承的方法)。如果您面临问题,您应该为此发布一个新问题,而不是在此处合并这些问题。@KrishnanMahadevan-改为使用属性文件如何?