Selenium:找到元素"旁边"其他元素

Gui*_*ume 15 java testing selenium

我正在使用Selenium将web测试添加到我的项目中.我已经有一堆测试用于检查特定元素:

final WebElement dateElement = web.findElement(By.id(elementId));
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我有另一个要求.这是在我生成的页面中:

<input type="text" id="dateElement" name="dateElement" value="bunch of monkeys" tabindex="101" placeholder="yyyy-mm-dd">
<span class="error">dateElement is an invalid date</span>
Run Code Online (Sandbox Code Playgroud)

如何获取错误消息?我想要一些允许我在dateElement之后请求类"错误"的span元素的东西.

(这个错误消息是由Spring MVC批准的,因此直接更改它并不容易.可能我猜,但我不愿意).

欢迎任何其他想法.

Gui*_*ume 25

好的,我已经找到了使用Xpath和follow-sibling的解决方案,它并不太复杂.

final WebElement errorElement = web.findElement(By.xpath("//*[@id='" + elementId + "']/following-sibling::span[@class='error']"));
Run Code Online (Sandbox Code Playgroud)

这给了我想要的东西,NoSuchElementException当它不在这里时抛出一个,这正是我想要的.

  • 这甚至可以使用`final WebElement errorElement = dateElement.findElement(By.xpath("following-sibling :: span [@ class ='error']"))来简化;`如果你有实际的`WebElement dateElement`可用.您必须使用该元素作为搜索的根,但请注意,在这种情况下,xpath表达式不应以`//`(或`/`)开头,否则它无论如何都会从文档根搜索. (4认同)

CBR*_*cer 6

elementSelector = "input + span[class='error']";

final WebElement dateElement = web.findElement(By.cssSelector(elementSelector));
Run Code Online (Sandbox Code Playgroud)