将HTML表中的数据存储到2D阵列Selenium Java中

时间:2017-07-13 15:38:38

标签: java arrays selenium qa

我正在尝试将HTML表中的数据存储到2D数组中,但我似乎无法弄明白。我的代码目前看起来像这样。

这是表格所在的网站:https://www.w3schools.com/html/html_tables.asp

@Test
public void checkTable() {

  // Number of Rows in table
  int rowCount = driver.findElements(By.xpath("//*[@id='customers']/tbody/tr")).size(); 
  System.out.println("The total number of rows is " + rowCount);

  // Number of Columns in table
  int colCount = driver.findElements(By.xpath("//*[@id='customers']/tbody/tr[1]/th")).size();
  System.out.println("The total number of columns is " + colCount);

  // Dynamic X-Path

  String firstX = "//*[@id='customers']/tbody/tr[";
  String secondX = "]/td[";
  String thirdX = "]";

  for(int i=2; i <= rowCount; i++) {
      for(int j=1; j <= colCount; j++) {
          String completeX = firstX + i + secondX + j + thirdX;
          String tableData = driver.findElement(By.xpath(completeX)).getText();
          System.out.println(tableData + "   ");
      }
      System.out.println(" ");
  }

这是当前的输出。

  

Alfreds Futterkiste
  Maria Anders
  德国

     

Centro comercial Moctezuma
  Francisco Chang
  墨西哥

     恩斯特亨德尔   罗兰孟德尔
  奥地利

     

岛屿交易
  海伦贝内特   英国

     

Laughing Bacchus Winecellars
  Yoshi Tannamuri
  加拿大

     

Magazzini Alimentari Riuniti
  Giovanni Rovelli
  意大利

我试图让输出看起来像这样。

  

[[Alfreds Futterkiste,Maria Anders,德国],[Centro comercial Moctezuma,Francisco Chang,Mexico]]等。

2 个答案:

答案 0 :(得分:0)

我不认为这与Selenium有任何关系。这仅基于逻辑。 以下是您应该尝试的代码。如果它能解决您的问题,请告诉我。

    for(int i=2; i <= rowCount; i++) {
        if(i==2)
        {
            System.out.print("[");
        }

        for(int j=1; j <= colCount; j++) {
            String completeX = firstX + i + secondX + j + thirdX;
            String tableData = driver.findElement(By.xpath(completeX)).getText();

            if (j==1)
            {
            System.out.print("[");
            }

            if (j==colCount)
            {
                System.out.print(tableData);
            }
            else
            {
                System.out.print(tableData + ',');
            }

            if (j==colCount && i!=rowCount)
            {
                System.out.print("],");
            }

            if (j==colCount && i==rowCount)
            {
                System.out.print("]]");
            }       
    }    
}

答案 1 :(得分:0)

所需的输出看起来像是使用Arrays toString()方法生成的。因此,您可以使用一维数组并使用toString()方法直接生成它,而无需担心手动添加空格和换行。

  1. 现在你初始化一维数组来存储每一行​​的结果。在第一个循环之外创建它。

    String[] rowResults = new String[rowCount];
    
  2. 您可以创建另一个1D数组。将其置于第一个循环内部和第二个循环外部。

    String[] columnResults = new String[coulmCount].
    
  3. 当您开始阅读元素时,将其添加到columnResults并完成内部循环。使用下面的

    String columnOutput = Arrays.toString(columnResults);
    rowResults.add(columnOutput);
    

    数组的Arrays.toString(arr)&#34; arr&#34;会给你[&#34; a&#34;,&#34; b&#34;,&#34; c&#34; ]格式。

  4. 所以一旦你完成了执行,就跑了 Arrays.toString(rowResults),您将获得所需格式的输出。