Java Selenium测试:如何从CSV读取特定的行或行以将数据输入到TestNG测试中

问题描述 投票:1回答:2

我正在完成一个即将完成的项目。我知道我使用的方法以及整体上的代码都可以使用,但是我仍然坚持如何从CSV文件中读取特定的行或列。

示例-我的CVS看起来像这样...

  1. 标题,URL 1,登录名,密码1 |
  2. 标题二,URL 2,Login2,Password2 |
  3. 标题三,URL 3,Login3,Password3 |
  4. ...依此类推

这是我的@DataProvider,它读取CSV文件

//opens and reads in CVS file from resource folder
@DataProvider
    public Iterator<Object[]> expectedTitles() throws IOException {
        List<Object []>testData = new ArrayList<>();
        String[] data = null;
        BufferedReader br = new BufferedReader(new FileReader("src/main/resources/expectedTitles.csv"));
        String line;
        while ((line = br.readLine()) != null){
            data = line.split(",");
            testData.add(data);
        }
        return testData.iterator();
    }

我对于CSV中的每一行数据都有一个@Test方法,看起来像这样。

//executes sideNavAboutLink test 
    @Test(dataProvider = "expectedTitles")
    public void sideNavAboutLink(String pageTitle){

        driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);
        AboutLink page = new AboutLink(driver);
        page.loadPage();
        page.clickSideAbout(); //clicks on link
        page.validateURLSideNav(); //Validates URL
        page.validateTitleSideNav(pageTitle); //Validates Page Title
    }

当前,这全部或多或少都起作用,因为我没有完全填写CSV文件,但只有pageTitle,但是就像我上面所说的,我希望能够调用任何给定的行或列来获取摆脱多余的代码。我看过其他一些示例,但是我还没有弄清楚如何使其适应上面的代码。

请任何帮助将非常感谢。

java selenium csv automated-tests testng
2个回答
1
投票

我认为您的测试方法可以具有数组本身而不是第一个字符串,因此您可以将测试方法内部的数组值与索引一起使用,并获取任何行/列值。

public void sideNavAboutLink(String args[]){

将带来整个数组,然后我们可以得到:

String pageTitle = args[0];
String url = args[1];
String userName = args[2];
String password = args[3];

在测试方法中,并在函数调用中使用这些变量。


0
投票

这里是分步示例。

我有一个包含3个测试数据的CSV文件。我创建了一个函数,该函数将根据提供的标题返回特定的数据集。我们有3个独立的数据提供程序来服务每个测试用例。现在我们可以为一个测试数据运行一个测试用例。

我希望它将对您有帮助。

[CSV文件数据:

enter image description here

用于读取提供行标题的特定行的功能(可以根据要求进行自定义)

private  String[][] expectedTitles(String titleName) throws IOException {
    String[][] testData = null;
    String[] data = null;
    String line = null;

    BufferedReader br = new BufferedReader(new FileReader("...\\yourfilepath\\data.csv"));


    while ((line = br.readLine()) != null){

        data = line.split(",");
       testData= new String[1][data.length];

        if(data[0].equalsIgnoreCase(titleName))
        {
            for(int i =0; i<data.length; i++)

            {

            testData[0][i] = data[i];

            }

        break;
        }
    }
    return testData;        
}

特定于测试数据的数据提供者

@DataProvider(name = "GoogleDataprovider")
    public Object[][] googleDataprovider() throws IOException {
         Object[][] arrayObject = expectedTitles("Google");
         return arrayObject;
    }


    @DataProvider(name = "MicrosoftDataprovider")
    public Object[][] microsoftDataprovider() throws IOException {
         Object[][] arrayObject = expectedTitles("Microsoft");
         return arrayObject;
    }

    @DataProvider(name = "WallmartDataprovider")
    public Object[][] wallmartDataprovider() throws IOException {
         Object[][] arrayObject = expectedTitles("Wallmart");
         return arrayObject;
    }

使用来自数据提供者的特定测试数据的测试用例(1个测试用例用于1个数据集)]] >>

@Test(dataProvider="GoogleDataprovider")
    public void testGoogleData(String title, String url, String domain) {
        Assert.assertEquals("Google", title);
        Assert.assertEquals("www.google.com", url);
        Assert.assertEquals("Search engine", domain);
    }

    @Test(dataProvider="MicrosoftDataprovider")
    public void testMicrosoftData(String title, String url, String domain) {
        Assert.assertEquals("Microsoft", title);
        Assert.assertEquals("www.microsoft.com", url);
        Assert.assertEquals("Operating System", domain);
    }


    @Test(dataProvider="WallmartDataprovider")
    public void testWallmartData(String title, String url, String domain) {
        Assert.assertEquals("Wallmart", title);
        Assert.assertEquals("www.wallmart.com", url);
        Assert.assertEquals("Retail", domain);

    }

输出:

PASSED:testGoogleData(“ Google”,“ www.google.com”,“搜索引擎”)通过:testMicrosoftData(“ Microsoft”,“ www.microsoft.com”,“正在运行系统“)通过:testWallmartData(” Wallmart“,” www.wallmart.com“,“零售”)

© www.soinside.com 2019 - 2024. All rights reserved.