Selenium WebDriver w/Java - 选择父节点/后代节点时出现问题



我正在使用带有Java和Selenium WebDriver的xpath从网页上的XML树中选择一个节点。我需要选择的节点是类="红色按钮"的超链接,并且是类="步骤"的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 查询?

您的 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 的//而不是/

最新更新