0

我正在使用带有 Java 和 Selenium WebDriver 的 xpath 从网页上的 XML 树中选择一个节点。我需要选择一个带有class =“red-button”的超链接的节点,并且是一个带有class =“step”的div元素的后代(不是直接子元素)。这是我的代码:

List<WebElement> goButton = driver.findElements(By.xpath("/div[@class=\"step\"]/a[@class=\"red-button\"]"));

        if(goButton.get(0)!= null){
            continueButton.get(0).click();
        }

我需要等待红色按钮元素出现,因为它是动态加载的。这就是我选择使用 findElements() 方法而不是 findElement() 的原因。我的理解是 findElements() 池化 DOM,直到找到元素或超时。当我运行我的代码时,我得到:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

这意味着 goButton 为空,因此 WebDriver 找不到该元素。我在我的 Java 逻辑中做错了什么还是我需要修复 xpath 查询?

4

1 回答 1

0

您的 XPATH 不正确。

/div将在根 DOM 节点下找到一个 div。你想//div在开头,并//a找到链接。这里有一些解决方案。

使用 CSS(比 xpath 更干净、更快速)..

List<WebElement> goButton = driver.findElements(By.cssSelector("div.step a.red-button"));

使用 XPATH(如果你真的坚持使用它。

List<WebElement> goButton = driver.findElements(By.xpath("//div[@class='step']//a[@class='red-button']"));

由于您正在寻找后代,而不是孩子,因此您需要使用 xpath's //not/

于 2013-09-19T17:46:11.857 回答