如何创建所有XPATH元素的所有innerHTML的列表

时间:2018-07-13 07:50:22

标签: java list selenium selenium-webdriver xpath

使用selenium,我们如何获取相同XPATH元素的innerHTML列表?

情况如何:-

相关HTML:

<span class="AbcD">2017 Year</span>
<span class="AbcD">2015 Year</span>
<span class="AbcD">2011 Year</span>
<span class="AbcD">2012 Year</span>
<span class="AbcD">2018 Year</span>

期望是什么:-

我所知道的是<span class="AbcD">元素存在很多次了。 我想要spans中的所有ArrayList的innerHTMLs:

{2017 Year, 2015 Year, 2011 Year, 2012 Year, 2018 Year}

我尝试过的事情:-

JAVA:

List<String> PreviousList= new ArrayList<>();
PreviousList = driver.findElements(By.xpath("//span[@class='AbcD']")).innerHTML;

3 个答案:

答案 0 :(得分:3)

使用Java 8中的以下代码:

List<String> yearList = driver.findElements(By.xpath("//span[@class='AbcD']")).stream().map(element -> element.getAttribute("innerText")).collect(Collectors.toList());

希望对您有帮助。

简单来说:

List<WebElement> years = driver.findElements(By.xpath("//span[@class='AbcD']"));
List<String> yearsList = new ArrayList<>();
for(WebElement year : years) {
    yearsList.add(year.getAttribute("innerText"));
}
System.out.println(yearsList);

两者都可以。

答案 1 :(得分:1)

根据您提供的用于收集ArrayList中所有<span>标签的所有 innerHTML 的HTML,您可以使用以下解决方案:

List<String> textList= new ArrayList<>();
List<WebElement> PreviousList = driver.findElements(By.xpath("//span[@class='AbcD']"));
for (WebElement ele:PreviousList)
    textList.add(ele.getAttribute("innerHTML"));

答案 2 :(得分:1)

您可以尝试JS方法:

List<WebElement> elements = driver.findElements(By.xpath("//span[@class='AbcD']"));
    List<String> previousList= new ArrayList<>();
    for (WebElement element : elements) {
        previousList.add((String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element));
    }

//or using JAVA 8 features:
    List<String> previousList = elements.stream()
            .map(webElement -> (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", webElement))
            .collect(Collectors.toList());