【问题标题】:Selenium WebDriver is not clicking on first buttonSelenium WebDriver 没有点击第一个按钮
【发布时间】:2015-12-29 13:00:19
【问题描述】:

我有一个包含 5 个“购买”按钮的列表。 Selenium WebDriver 没有点击第一个“购买”按钮,但点击了剩下的 4 个就好了。运行一个 println,它显示了 WebDriver 找到的所有 5 个购买按钮。

我尝试过切换列表中按钮的顺序,我尝试过调试它,我也包含了显式等待,但没有任何帮助。谁有线索?

我的代码如下:

for (int i = 0; i < allProductsOnsite.size(); i ++) {
        //System.out.println(allProductsOnsite.get(i).getText());
        if (prodsToBuy.contains(allProductsOnsite.get(i).getText())) {
            System.out.println("Found -------" + allProductsOnsite.get(i).getText() );
            WebDriverWait wt = new WebDriverWait(driver, 15);
            wt.until(ExpectedConditions.visibilityOfAllElements(allProductsOnsite));

            allBuyButtons.get(i).click();
        }
}

【问题讨论】:

  • 您正在检查allProductsOnsite 中的WebElements,但您没有检查allBuyButtons 中的WebElements。因此,您的 println 并未显示已找到所有 5 个按钮,而是显示已找到 5 个产品。可能是第一个产品已加载,但在 Selenium 查找所有按钮之前未加载按钮。尝试检查 allBuyButtons 中的每个元素,并根据您的发现向我们提供更新。
  • 感谢您帮助我 TJamesBoone,我遵循了您的建议并在 allBuyButtons 上进行了 println,它为我提供了页面上预期的正确按钮数量,这让我认为,因为所有预期的按钮都是可见,webdriver 应该能够点击它们,但它仍然没有点击第一个按钮。
  • 提供更多信息,例如:您如何找到所有按钮、html sn-p(或网页链接)
  • 作为一个实验(这不是你想在严肃的代码中做的事情),在你的 for 循环之前放置一个 Thread.sleep(3000) 并运行你的代码. 如果有效,那么我们就会知道visibilityOfAllElements() 不是第一个按钮可点击的充分条件。 如果还是不行,那么我们就会知道问题与没有等待足够长的时间有关。
  • 您的第一个按钮是否显示在第二个屏幕上,因此 webdriver 在点击之前必须向下滚动?

标签: java selenium webdriver browser-automation


【解决方案1】:

尝试使用JavascriptExecutor点击

WebElement element= driver.findElement(By.xpath(".//*[@id='loginButton']/div"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);

如果需要,也可以在此代码之前使用一些等待

希望对你有帮助:)

【讨论】:

  • 好主意,我也会试试这个,让你知道结果。
  • 是的,执行者处理得很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-28
  • 2016-08-06
  • 2015-04-25
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多