我有一个包含不同“行”的图库,其中包含特定数量的“列”(图像)。我想创建一个方法,我可以根据x,y选择特定的图像。
所以我使用pageObjects搜索包含图库的部分。
@FindBy(how = How.XPATH, using = "//section[@id='gallery']")
private WebElement sectionGallery;
然后,我创建了一个小方法,它将返回此库的所有行
public List<WebElement> getGalleryRows(){
return sectionGallery.findElements(By.xpath("//div[@class='gallery-horizontal-row']"));
}
这就是问题所在。我得到的每个Webelement都有xpath表达式“// div [@ class ='gallery-horizontal-row']”,而不仅仅是“sectiongallery”webelement下面的webelements。
我是否误解了这个功能? 对于HTML源代码,我希望返回3个Webelements,但我得到4个。
当我在完整的Xpath表达式上执行Driver.FindElements时,它只返回3个元素。
public List<WebElement> getGalleryRows(){
return DriverManager.getDriver().findElements(By.xpath("//section[@id='gallery']//div[@class='gallery-horizontal-row']"));
}
我的HTML模糊了来源:
<section data-section-title="Galerie" id="gallery">
<header>
<h1>Galerie</h1>
</header>
<div>
<div >
<div class="gallery-horizontal-row" style="height: 220px;">
<div>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
</div>
</div>
<div class="gallery-horizontal-row" style="height: 220px;">
<div>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
</div>
</div>
<div class="gallery-horizontal-row" style="height: 220px;">
<div>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
<article class="gallery-item"></article>
</div>
</div>
</div>
</div>
</section>
<section id="other">
....
</section>
<section id="other2">
....
</section>
<section id="other3">
....
</section>
<section data-section-title="other4" id="other4">
<header>
<h1>Other4</h1>
</header>
<div>
<div >
<div class="gallery-horizontal-row" style="height: 220px;">
<div>
....
答案 0 :(得分:5)
在第二个表达式的.
(//
轴)前面添加descendant-or-self::
:
return sectionGallery.findElements(By.xpath(".//div[@class='gallery-horizontal-row']"));
我是否误解了这个功能?
不完全,但是以//
开头的表达式选择输入文档中 where 的元素,即使您已选择输入的子集作为第二个表达式的起点。尽可能避免使用//
- 这是一个严重过度使用的轴 - 尤其是XPath初学者。
另一方面,以.//
开头的表达式确实以上下文节点为起点。