Selenium如何获取WebElement内的所有元素

huangapple go评论88阅读模式
英文:

Selenium how to get all elements inside a WebElement

问题

我正在尝试获取Selenium的WebElement内的所有元素,例如:

<div>
    <element>
        <header>header</header>
        <p>Paragraph</p>
    </element>
    <element>
        <p>Another Paragraph</p>
    </element>
</div>

我想获取包括子元素在内的所有在<div>内的元素列表,就像这样...

  1. div
  2. element
  3. header
  4. paragraph
  5. element
  6. paragraph

所以我尝试了这个:

element.findElements(By.xpath("*"))

但这只会返回:

  1. element
  2. element

然后我尝试了一个递归方法来获取所有子元素:

private static ArrayList<WebElement> getAllElements(WebElement element, ArrayList<WebElement> ret) {
    ret.add(element);
    List<WebElement> childs = element.findElements(By.xpath("*"));
    for(WebElement e: childs)
        getAllElements(e, ret);
    return ret;
}

private static List<WebElement> getAllElements(WebElement element) {
   return getAllElements(element, new ArrayList<WebElement>());
}

但查询findElements()太长时间了。

我在思考一定有一种xpath的方法,但我找不到它。

英文:

I'm trying to get all the elements inside a selenium WebElement, for example:

&lt;div&gt;
    &lt;element&gt;
        &lt;header&gt;header&lt;/header&gt;
        &lt;p&gt;Paragraph&lt;/p&gt;
    &lt;/element&gt;
    &lt;element&gt;
        &lt;p&gt;Another Paragraph&lt;/p&gt;
    &lt;/element&gt;

&lt;/div&gt;

I want to get a list of all the elements inside <div> including child elements, like so...

  1. div
  2. element
  3. header
  4. paragraph
  5. element
  6. paragraph

So I've tried this

element.findElements(By.xpath(&quot;*&quot;))

but this would return only

  1. element
  2. element

So then I tried a recursive method to get all of the childs

private static ArrayList&lt;WebElement&gt; getAllElements(WebElement element, ArrayList&lt;WebElement&gt; ret) {
    ret.add(element);
    List&lt;WebElement&gt; childs = element.findElements(By.xpath(&quot;*&quot;));
    for(WebElement e: childs)
        getAllElements(e,ret);
    return ret;
}
private static List&lt;WebElement&gt; getAllElements(WebElement element) {
   return getAllElements(element,new ArrayList&lt;WebElement&gt;());
}

But querying findElements() takes too long

I'm thinking there must be a xpath way, but I can't seem to find it

答案1

得分: 5

我们可以使用 WebElement.findElements 方法来获取元素内所有元素的列表。

对于上述的 HTML,要获取 <div> 内所有元素的列表,可以使用以下代码:

// 获取 <div> 标签的 WebElement
WebElement element = driver.findElement(By.tagName("div"));

// 下面的代码将返回元素内所有元素的列表
List<WebElement> webEleList = element.findElements(By.xpath(".//*"));

// 对于给定的 HTML,它将打印出 5。因为 <div> 内有 5 个元素
System.out.println(webEleList.size());
英文:

We can use WebElement.findElements method to get list of all the elements inside element.

For above HTML, to get list of all elements present inside div, we can use below code:

// Get webelement for div tag
WebElement element = driver.findElement(By.tagName(&quot;div&quot;));

// Below will return a list of all elements inside element
List&lt;WebElement&gt; webEleList = element.findElements(By.xpath(&quot;.//*&quot;));

//For above given HTML it will print 5. As there are 5 elements inside div
System.out.println(webEleList.size());

huangapple
  • 本文由 发表于 2020年8月23日 07:14:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/63541972.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定