在缓存中找不到元素 - 也许页面已经更改,因为它已经查找

时间:2013-05-29 17:32:55

标签: c# selenium selenium-webdriver

我有一组测试,其中第一个运行并且休息失败。它只是将一个项目列表添加到购物车。我有一个错误:“在缓存中找不到元素 - 也许页面已经改变,因为它已经查找”。 我尝试使用下面似乎没有帮助的代码。

driver.Manage().Cookies.DeleteAllCookies();

有没有办法清除缓存或摆脱这个错误。

代码:它在此验证方法中停止。当我注释掉这些行时,测试将针对所有项目运行。

    public bool VerifyItemPresentInCart()
    {
            //Get the cartsize and verify if one item present
            IWebElement cartSize = driver.FindElement(By.CssSelector("div[class='cart-size']>div"));                                             
            string actualMsg = cartSize.Text;
            string expectedMsg = "1";
            VerifyIfTextPresentMethod(expectedMsg,actualMsg);                
            return true;                  
    }

更新:测试有一些常用的方法,因此每个项目都要重复购买。这是常用方法之一。这些方法适用于第一项说电话并将其添加到购物车。对于重复整个过程的第二项,我在这种方法中得到了这个错误。

1 个答案:

答案 0 :(得分:0)

您看到的错误是由于两个原因之一

  1. 该元素已被完全删除。
  2. 该元素不再附加到DOM。
  3. 您尝试与之交互的元素,在离开页面后无法再次“引用”。

    检查代码中发生此错误的行,然后尝试再次查找该元素。

    示例: -

    webelement = @driver.find_element(:id, "amey")
    # Some other interaction whcih causes the element to become "stale"
    webelement.send_keys "Hey!" # "Element not found in the cache - perhaps the page has changed since it has looked up" error is shown
    

    将其更改为

    @driver.find_element(:id, "amey").send_keys "Hey!" #lookup the same element again
    

    有关详细信息,请查看here

    <强>更新

    对您的代码进行了更改

    {
                //Get the cartsize and verify if one item present
                VerifyIfTextPresentMethod("1",driver.FindElement(By.CssSelector("div[class='cart-size']>div")).Text);                
                return true;                  
    }