在硒中定位 WebElements 的子节点

2022-09-01 00:54:41

我正在使用硒来测试我的Web应用程序,我可以使用成功找到标签。但是,我时不时地需要在该节点内找到子节点。By.xpath

例:

<div id="a">
    <div>
        <span />
        <input />
    </div>
</div>

我可以做:

WebElement divA = driver.findElement( By.xpath( "//div[@id='a']" ) )

但现在我需要找到输入,这样我就可以做到:

driver.findElement( By.xpath( "//div[@id='a']//input" ) )

但是,在代码中,我只有,不再是它的xpath...我想做这样的事情:divA

WebElement input = driver.findElement( divA, By.xpath( "//input" ) );

但这样的功能并不存在。我无论如何都可以这样做吗?

BTW:有时我需要找到一个具有某个十进制节点的节点。我如何在 xpath 中询问“包含文本的 ”?<div><div><span>'hello world'


答案 1

根据JavaDocs,你可以这样做:

WebElement input = divA.findElement(By.xpath(".//input"));

如何在 xpath 中询问“包含带有文本 'hello world' 的跨度的 div 标签”?

WebElement elem = driver.findElement(By.xpath("//div[span[text()='hello world']]"));

XPath规范在这方面是一个非常好的阅读。


答案 2

如果您必须等待,则有一个方法可以采用“父”元素和定位器,例如:presenceOfNestedElementLocatedByBy.xpath

WebElement subNode = new WebDriverWait(driver,10).until(
    ExpectedConditions.presenceOfNestedElementLocatedBy(
        divA, By.xpath(".//div/span")
    )
);

推荐