Java 使用Selenium/Katalon在html表上迭代

Java 使用Selenium/Katalon在html表上迭代,java,loops,selenium,html-table,katalon-studio,Java,Loops,Selenium,Html Table,Katalon Studio,我试图遍历一个HTML表以从中获取值,但没有得到所需的结果。这是HTML代码: 报价单编号 报价日期 顾客 销售员 全部的 地位 SO107 03/04/2019 17:40:46 AA 管理员 305.00 € 发出报价单 ​ SO055 03/01/2019 20:24:35 AA 管理员 2.44 € 引用 ​ SO039 03/01/2019 12:16:08 AA 管理员 2.44 € 引用 ​ SO025 02/28/2019 19:50:59 BB 管理员 2.44 € 引用

我试图遍历一个HTML表以从中获取值,但没有得到所需的结果。这是HTML代码:


报价单编号
报价日期
顾客
销售员
全部的
地位
SO107
03/04/2019 17:40:46
AA
管理员
305.00 €
发出报价单
​
SO055
03/01/2019 20:24:35
AA
管理员
2.44 €
引用
​
SO039
03/01/2019 12:16:08
AA
管理员
2.44 €
引用
​
SO025
02/28/2019 19:50:59
BB
管理员
2.44 €
引用
312.32

试试这个xpath。它将返回包含SO值的所有单元格

By.xpath("//table//td[contains(text(),'SO')]");

List<WebElement> rows = driver.findElements(By.xpath("//table//td[contains(text(),'SO')]"));
By.xpath(//table//td[contains(text(),'SO')]);
列表行=driver.findElements(By.xpath(//table//td[contains(text(),'SO')]);

试试这个xpath。它将返回包含SO值的所有单元格

By.xpath("//table//td[contains(text(),'SO')]");

List<WebElement> rows = driver.findElements(By.xpath("//table//td[contains(text(),'SO')]"));
By.xpath(//table//td[contains(text(),'SO')]);
列表行=driver.findElements(By.xpath(//table//td[contains(text(),'SO')]);

您可以直接在
SOxxx
所在的第一列中找到所有表格单元格

List<WebElement> first_cloumns = driver.findElements(
                     By.cssSelector("div.o_sale_order tbody td:nth-child(1)"));


List<String> values = first_cloumns
                            .stream() // require JDK 8 and higher
                            .map(td -> td.getText())
                            .collect(Collectors.toList());
List first\u cloumns=driver.findElements(
由cssSelector(第N个孩子(1)”);
列表值=第一次结束
.stream()//需要JDK 8及更高版本
.map(td->td.getText())
.collect(Collectors.toList());

您可以直接在
SOxxx
所在的第一列中找到所有表格单元格

List<WebElement> first_cloumns = driver.findElements(
                     By.cssSelector("div.o_sale_order tbody td:nth-child(1)"));


List<String> values = first_cloumns
                            .stream() // require JDK 8 and higher
                            .map(td -> td.getText())
                            .collect(Collectors.toList());
List first\u cloumns=driver.findElements(
由cssSelector(第N个孩子(1)”);
列表值=第一次结束
.stream()//需要JDK 8及更高版本
.map(td->td.getText())
.collect(Collectors.toList());

关于第二个问题:视情况而定。如果没有HTML或者不知道页面的详细信息,很难判断。选择过滤器时会发生什么情况?您可能会得到某种微调器元素。你可以等它隐形。谢谢你的建议。微调器不会自行消失,但在选择过滤器后保持打开状态。我认为唯一的可能是再次点击“过滤器”关闭微调器,以浪费时间等待页面加载,并等待“引用”过滤器出现(可点击)在搜索栏内,但我不知道这是否足够。我不认为还有其他可能性,因为页面的其余部分保持不变(没有元素出现或消失),只有表的内容被更新,这是不可预测的。你怎么看?当你点击“过滤器”时,应用程序的预期行为是什么?从最终用户的角度来看?列表通常包含报价和发票,而不是使用微调器“过滤器”中包含的其中一个过滤器,您只能查看报价,这是我感兴趣的。关于第二个问题:这取决于。如果没有HTML或者不知道页面的详细信息,很难判断。选择过滤器时会发生什么情况?您可能会得到某种微调器元素。你可以等它隐形。谢谢你的建议。微调器不会自行消失,但在选择过滤器后保持打开状态。我认为唯一的可能是再次点击“过滤器”关闭微调器,以浪费时间等待页面加载,并等待“引用”过滤器出现(可点击)在搜索栏内,但我不知道这是否足够。我不认为还有其他可能性,因为页面的其余部分保持不变(没有元素出现或消失),只有表的内容被更新,这是不可预测的。你怎么看?当你点击“过滤器”时,应用程序的预期行为是什么?从最终用户的角度来看?列表通常包含报价和发票,而不是使用微调器“过滤器”中包含的其中一个过滤器,您只能查看报价,这正是我感兴趣的。