Java Selenium 测试 : How to read in a specific line and or row from a CSV to feed in data to a TestNG test

标签 java selenium csv automated-tests testng

我正在开发一个即将完成的项目。我知道我的方法和代码总体有效,但我对如何从 CSV 文件中读取特定行或列感到困惑。

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

  1. 标题一、网址 1、登录名 1、密码 1 |
  2. 标题二、网址 2、登录名 2、密码 2 |
  3. 标题三、网址 3、登录名 3、密码 3 |
  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,但就像我上面所说的那样,我希望能够调用任何给定的行或列去掉多余的代码。我已经查看了其他一些示例,但我还没有弄清楚如何使其适应我上面的代码。

请提供任何帮助,谢谢。

最佳答案

这是分步示例。

我有一个包含 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

@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", "Search engine") PASSED: testMicrosoftData("Microsoft", "www.microsoft.com", "Operating System") PASSED: testWallmartData("Wallmart", "www.wallmart.com", "Retail")

关于Java Selenium 测试 : How to read in a specific line and or row from a CSV to feed in data to a TestNG test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724894/

相关文章:

r - 如何将数据列表保存到 R 中的文本文件?

当客户端发送字符串时,Java websocket服务器接收到的不是纯文本

java - 如何将十进制转换为二进制并以特定方式格式化?

java - Fragment 中的自定义 listView。未找到布局

java - 为 "Step"作用域 bean 编写 JUnit 测试 - 没有为作用域名称 "step"注册作用域(Spring Batch 3.0.10)

java - Cucumber picocontainer/SharedDriver 无法正确处理浏览器实例

php - php中csv文件中的SQL Select语句

java - 将 DTO 转换为 JSON

Selenium WebDriver HTTP 错误 : 403 Forbidden for Proxy RequestURI=/session

javascript - 通过 Selenium WebDriver 从 JavascriptExecutor 接口(interface)使用 executeScript 方法时,arguments[0] 和 arguments[1] 是什么意思?