Selenide-selenium StaleElementReferenceException:在缓存中找不到元素

时间:2016-04-17 21:18:40

标签: java selenium selenium-webdriver automated-tests selenide

我必须打开页面中的所有链接,然后检查是否有文本("没有信息")。

我使用了Selenide v3.5和Selenium v​​2.53库。但是,我有这个异常" StaleElementReferenceException"。

我的代码如下:

    open(url);
        WebDriverRunner.clearBrowserCache();

        WebDriverRunner.getWebDriver().manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

        List<WebElement> linksize = WebDriverRunner.getWebDriver().findElements(By.tagName("a"));

        linksCount = linksize.size();
        links = new String[linksCount];
        Common.consoleOutput.printMessage(String.format("Total no of links Available: %d", linksCount));

        for (int i = 0; i < linksCount; i++)
        {
            links[i] = linksize.get(i).getAttribute("href");

        }
        // navigate to each Link on the webpage
        for (int i = 0; i < linksCount; i++) {
            WebDriverRunner.getWebDriver().navigate().to(url_arabic);
            WebElement error = $(Selectors.byText("No info"));
            $(error).shouldNotBe(visible).shouldNotBe(text("No info"));
        }

2 个答案:

答案 0 :(得分:1)

您使用网页元素包装:

WebElement error = $(Selectors.byText("No info"));
$(error).shouldNotBe(visible).shouldNotBe(text("No info"));

尝试直接使用选择器包装:

$(Selectors.byText("No info")).shouldNotBe(visible).shouldNotBe(text("No info"));

它应该有所帮助。我不建议使用$(WebElement),因为,selenide执行重新搜索元素。如果第一次没有找到元素,那么通过selenium设计很难从WebElement中获取正确的选择器。

答案 1 :(得分:0)

在我使用以下代码获取链接元素后,它工作正常:

List<String> links = new ArrayList<>();
        for (SelenideElement link : $$("a"))
            links.add(link.attr("href"));

而不是

        List<WebElement> linksize = WebDriverRunner.getWebDriver().findElements(By.tagName("a"));