我有我的硒代码,该代码可以提取列表中可用的名称列表。 现在,我想存储与全局相同的名称,以备后用。请帮忙。
我已经尝试过数组处理,它只对每一行都适用,而对数值不适用。
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();
答案 0 :(得分:0)
查看如何定义此String CaselevelSigningCM。就像那样去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());
答案 1 :(得分:0)
You can use Arraylist to store and retrieve them
ArrayList ts = new ArrayList();
将对象存储在arraylist
ts.add();
答案 2 :(得分:0)
您可以使用Stream.map() function来将WebElements的列表转换为一次包含元素文本属性的Strings的列表:
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 Axes和XPath Functions / Operators您的表达要尽可能相对,稳健和可靠。
您还可以考虑使用Table框架的HtmlElements类来处理HTML tables