我有我的 selenium 代码,它可以提取列表中可用的名称列表。现在我想存储与全局相同的名称以备后用。请帮忙。我已经尝试过数组处理,它只对每一行进行处理,而不是对值进行处理。List<WebElement> allText = driver.findElements(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"));int total = allText.size();System.out.println(total);for(int i=3;i<=total;i++){ CaselevelSigningCMs =driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText(); System.out.println(CaselevelSigningCMs);}我应该得到这样的名字:Ranjit Nyk、Sudhanva G...。我必须在其他类/方法的其他页面中验证这些名称。CaselevelSigningCMs 是一个全局变量,它只提取单个项目。我需要定义为全局的类似数组,以便它可以提取多个项目。CaselevelSigningCMs =driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText();
3 回答
MM们
TA贡献1886条经验 获得超2个赞
查看此 String CaselevelSigningCMs 是如何定义的。就像那样去 ArrayList
可以说使用的字符串是在某些地方定义的
public String CaselevelSigningCMs = "";
同样定义ArrayList
public List<String> collectedItems=new ArrayList<>();
在循环中添加获取每个元素的文本,比如
collectedItems.add(driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText());
萧十郎
TA贡献1815条经验 获得超13个赞
您可以使用Stream.map() 函数一次性将WebElements列表转换为包含元素文本属性的字符串列表:
List<String> allText = driver.findElements(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr")) .stream() .map(WebElement::getText) .collect(Collectors.toList()); allText.forEach(System.out::println);
我也不太喜欢您的 XPath 表达式,尤其是:
//*
通配符这些
table[2]
和tr[3]
通配符表达式需要更长的时间来执行并消耗更多的资源,并且您的方法似乎非常依赖DOM结构,因此我建议使用XPath 轴以及XPath 函数/运算符来使您的表达式尽可能相关、健壮和可靠。
您还可以考虑使用HtmlElements框架的Table类来处理 HTML表格
BIG阳
TA贡献1859条经验 获得超6个赞
You can use Arraylist to store and retrieve them
数组列表 ts=new ArrayList();
将对象存储在数组列表中
ts.add();
添加回答
举报
0/150
提交
取消