在selenium中定位WebElements的子节点

Ste*_*eil 41 java selenium xpath webdriver

我正在使用selenium来测试我的Web应用程序,我可以使用成功找到标签By.xpath.但是现在我需要在该节点中找到子节点.

例:

<div id="a">
    <div>
        <span />
        <input />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我可以:

WebElement divA = driver.findElement( By.xpath( "//div[@id='a']" ) )
Run Code Online (Sandbox Code Playgroud)

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

driver.findElement( By.xpath( "//div[@id='a']//input" ) )
Run Code Online (Sandbox Code Playgroud)

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

WebElement input = driver.findElement( divA, By.xpath( "//input" ) );
Run Code Online (Sandbox Code Playgroud)

但是这样的功能不存在.我能这样做吗?

顺便说一句:有时候我需要找到一个<div>具有某种后代节点的东西.我怎样才能在xpath中询问"包含带有文本'hello world'的跨度的div-tag"?

Pet*_*ček 77

根据JavaDocs,您可以这样做:

WebElement input = divA.findElement(By.xpath(".//input"));
Run Code Online (Sandbox Code Playgroud)

我怎样才能在xpath中询问"包含带有文本'hello world'的跨度的div-tag"?

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

XPath规范是一个令人惊讶的好读.

  • 最新版本的XPath规范可以在[这里]找到(https://www.w3.org/TR/xpath-3/#abbrev) (2认同)

Mat*_*och 5

如果您必须等待,有一种方法presenceOfNestedElementLocatedBy可以使用“父”元素和定位器,例如 a By.xpath

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