如何解决StaleElementReferenceException错误

时间:2017-12-29 08:37:01

标签: c# selenium selenium-webdriver

我正在使用visual studio进行自动化测试。获取内部元素值时,它显示此错误。

它不会一直显示此错误,但有时会成功测试。

  

发生了OpenQA.Selenium.StaleElementReferenceException     的HResult = 0x80131500     Message =陈旧元素引用:元素未附加到页面文档

我试图解决这个问题,但不幸的是我没有得到任何积极的结果。

以下是我的代码:

public List<CaseListEntry> GetCaseListEntries()
        {
            var CaseGridTrs = CaseListGrid.FindElements(By.XPath(".//tr"));
            var entryList = CaseGridTrs.Select(x =>
            {
                var CaseEntryTds = x.FindElements(By.XPath(".//td"));
                var RegisterDate = CaseEntryTds.ElementAt(1).Text;
                var RegisterNo = CaseEntryTds.ElementAt(3).Text;
                return new CaseListEntry
                {
                    ListNo = CaseEntryTds.ElementAt(0).FindElement(By.XPath(".//a")).Text,
                    RegDate = DateTime.ParseExact(RegisterDate, "dd.MM.yyyy",
                    CultureInfo.InvariantCulture),
                    DocumentType = CaseEntryTds.ElementAt(2).Text,
                };
            }).ToList();
            return entryList;
        }

我在第8行遇到这个陈旧的异常错误。我也尝试使用 webdriver.wait 它仍然显示相同的错误。

我也尝试等待页面加载

  var customWait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(5), TimeSpan.FromMilliseconds(1));
        //ignore the timeout exception
        try
        {
            customWait.Until(CustomExpectedCond.ElementHasClass(LoadingIndicator, "t-icon t-refresh t-loading"));
            customWait.Until(CustomExpectedCond.ElementHasClass(LoadingIndicator, "t-icon t-refresh"));
        }
        catch (WebDriverTimeoutException) { /*ignore and hope for the best*/ }
    }

1 个答案:

答案 0 :(得分:0)

你可以这样做:

return Observable.interval(30000).startWith(0).flatMap(()=>{
            return this.http.get(someUrl).timeout(3000)
                    .map(this.extractData)
                    .catch(this.handleError);
        });

}