使用/ Java的Selenium WebDriver - 选择父/后代节点时遇到问题?

时间:2013-09-19 17:40:27

标签: java xpath selenium webdriver

我正在使用xpath与Java和Selenium WebDriver从网页上的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为null,因此WebDriver无法找到该元素。我在Java逻辑中做错了什么,还是需要修复xpath查询?

1 个答案:

答案 0 :(得分: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的//而不是/