如何存储列表中多个项目的全局数组以供以后使用

时间:2019-06-25 04:36:32

标签: java html selenium arraylist

我有我的硒代码,该代码可以提取列表中可用的名称列表。 现在,我想存储与全局相同的名称,以备后用。请帮忙。

我已经尝试过数组处理,它只对每一行都适用,而对数值不适用。

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 个答案:

答案 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 AxesXPath Functions / Operators您的表达要尽可能相对,稳健和可靠。

您还可以考虑使用Table框架的HtmlElements类来处理HTML tables