【问题标题】:How to store global Array of multiple items from a list for later use如何从列表中存储多个项目的全局数组以供以后使用
【发布时间】:2019-06-25 04:36:32
【问题描述】:

我有我的 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();

【问题讨论】:

    标签: java html selenium arraylist


    【解决方案1】:

    查看这个 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());
    

    【讨论】:

    • 我有一个使用这个的情况。我已经在全局范围内定义了 arraylist,它从一种方法中提取数据。当以不同的方法访问相同的内容时,它显示为空白
    【解决方案2】:
    You can use Arraylist to store and retrieve them
    

    ArrayList ts=new ArrayList();

    将对象存储在数组列表中

    ts.add();

    【讨论】:

      【解决方案3】:

      您可以使用Stream.map() functionWebElements 列表一次性转换为包含元素文本属性的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 来使你的表达式相对、健壮并且尽可能可靠。

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

      【讨论】:

      • 我明白了,它只是为了显示示例 xpath。我知道使用通配符表达式需要时间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多