如何在硒中将值从列表存储到arraylist

时间:2019-06-26 10:13:17

标签: java selenium selenium-webdriver arraylist selenium-chromedriver

我正在尝试将列表中的值存储到全局数组中,以便以后在其他页面中使用/验证。

我的元素如下所示:

尝试过的数组列表仅给出第一行,但是列表中有多个项。

<div class="col-lg-7">
    <div class="clearfix" style="padding-bottom:5px;">
        <i class="fa fa-user"></i><span style="margin-left:2%">Veena Pujari (Attorney)</span>
    </div>
    <div class="clearfix" style="padding-bottom:5px;">
        <i class="fa fa-user"></i><span style="margin-left:2%">Ranjit Nayak (Accredited Representative)</span>
    </div>
</div>

我正在尝试提取ex的值:

List<WebElement> PMPageCMList = driver.findElements(By.xpath("//*[@id='collapseCM']/div[2]/div[2]"));
            int totalcms = PMPageCMList.size();
            for(int i=1;i<=totalcms;i++){
                CaseManagersreceivingreminders.add(driver.findElement(By.xpath("//*[@id='collapseCM']/div[2]/div[2]/div"+"["+i+"]"+"/span")).getText());
                System.out.println(CaseManagersreceivingreminders);

5 个答案:

答案 0 :(得分:1)

如果您对以下值感兴趣:

Veena Pujari (Attorney)
Ranjit Nayak (Accredited Representative)

您可能需要修改XPath expression来查找<i> tag fa-user contains中的class,并为其{ {3}}

List<String> PMPageCMList = driver.findElements(By.xpath("//i[contains(@class,'fa-user')]/following-sibling::span"))
        .stream()
        .map(user -> user.getAttribute("innerText"))
        .collect(Collectors.toList());
PMPageCMList.forEach(System.out::println);

演示:

innerText

答案 1 :(得分:0)

尝试更改此行:

CaseManagersreceivingreminders.add(driver.findElement(By.xpath("//*[@id='collapseCM']/div[2]/div[2]/div"+"["+i+"]"+"/span")).getText());

成为:

CaseManagersreceivingreminders.add(driver.findElement(By.xpath("(//*[@id='collapseCM']/div[2]/div[2])[" +i +"]")).getText());

答案 2 :(得分:0)

试试看

CaseManagersreceivingreminders.add(driver.findElement(By.xpath("(.//*[@id='collapseCM']/div[2]/div[2]/div/span)["+i+"]")).getText());

以“(.// tag // subtag)[索引]”格式指定xpath时,它的工作方式更像一个列表 但是相反,“ .// tag // subtag [index]”搜索在父项下的第n个子项。

答案 3 :(得分:0)

大概是您想要打印的值,例如 Veena Pujari(律师) Ranjit Nayak(授权代表)等,因此您需要为visibilityOfAllElementsLocatedBy()诱导 WebDriverWait 您可以使用 Java8 stream()map(),并可以使用以下解决方案:

List<String> myValues = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='clearfix']/i[@class='fa fa-user']//following::span[1]"))).stream().map(element->element.getAttribute("innerHTML")).collect(Collectors.toList());
System.out.println(myValues);
  

您可以在How to extract the dynamic values of the id attributes of the table elements using Selenium and Java

中找到相关的讨论

答案 4 :(得分:0)

我找到了解决方案,谢谢大家!

注意:CaseManagersreceiving提醒-是存储的全局数组列表

tb_user