错误说明"元素在缓存中找不到页面可能已更改"

时间:2015-09-06 07:43:40

标签: selenium-webdriver

我试图通过Selenium Webdriver使用Java点击flipkart上的搜索按钮,我能够通过X路径点击按钮并且我写了“Boolean&# 39;单击显示按钮。 这是代码:

WebElement search = driver.findElement(By.xpath(".//*[@id='fk-header-search-form']/div/div/div[2]/input[1]"));
search.click();
boolean clicked = search.isEnabled();
System.out.println("Serach Button Clicked"+clicked);

2 个答案:

答案 0 :(得分:1)

如果点击按钮后页面发生变化,则找不到元素是正常的。单击后,您将执行搜索过程,正在加载新页面。 另一点是isEnabled,每次都会返回true,除非被禁用。在这种情况下,它看起来已经处于活动状态。

答案 1 :(得分:1)

有一些问题。

  1. .isEnabled()确定元素是否已启用。根据{{​​3}},这几乎总是如此,除非有一个禁用的INPUT(这里不适用)。因此,您的代码只是告诉您“搜索”按钮未被禁用,而不是您是否单击它。

  2. 您没有发布足够的代码来说明您收到此错误的原因。我可以看到你想要做什么,并写了一个如何做到这一点的简单例子。

  3. 试试这个

    FirefoxDriver driver = new FirefoxDriver();
    driver.get("http://www.flipkart.com/");
    By searchBoxLocator = By.id("fk-top-search-box");
    By searchButtonLocator = By.cssSelector("input[value='Search']");
    driver.findElement(searchBoxLocator).sendKeys("watch");
    driver.findElement(searchButtonLocator).click();
    
    1. 我建议你使用XPath以外的东西。它们比其他方法更脆,更慢。在上面的代码中,我使用了CSS Selector。阅读一些教程并使用docs作为参考。它们非常强大,恕我直言,比XPath更好。有一些东西只能通过XPath完成...在你遇到其中一个案例之前避免使用XPath。