我正在尝试将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]]等。
答案 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()方法直接生成它,而无需担心手动添加空格和换行。
现在你初始化一维数组来存储每一行的结果。在第一个循环之外创建它。
String[] rowResults = new String[rowCount];
您可以创建另一个1D数组。将其置于第一个循环内部和第二个循环外部。
String[] columnResults = new String[coulmCount].
当您开始阅读元素时,将其添加到columnResults并完成内部循环。使用下面的
String columnOutput = Arrays.toString(columnResults);
rowResults.add(columnOutput);
数组的Arrays.toString(arr)&#34; arr&#34;会给你[&#34; a&#34;,&#34; b&#34;,&#34; c&#34; ]格式。
所以一旦你完成了执行,就跑了 Arrays.toString(rowResults),您将获得所需格式的输出。