如何解决StaleElementReferenceException错误

穆图·阿伦

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

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

发生OpenQA.Selenium.StaleElementReferenceException HResult = 0x80131500消息=过时的元素引用:元素未附加到页面文档

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

下面是我的代码:

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*/ }
    }
宾尼(Binny)

您可以这样:

public List<CaseListEntry> GetCaseListEntries()
    {
        var CaseGridTrs = CaseListGrid.FindElements(By.XPath(".//tr"));
        var entryList = CaseGridTrs.Select(x =>
        {
            var CaseEntryTds        = x.FindElements(By.XPath(".//td"));

            var ListNoElement       = GetElementOrNull(CaseEntryTds,0);
            var RegisterDateElement = GetElementOrNull(CaseEntryTds,1);
            var DocumentTypeElement = GetElementOrNull(CaseEntryTds,2);
            var RegisterNoElement   = GetElementOrNull(CaseEntryTds,3);


            var RegisterDate        = (RegisterDateElement != null)? RegisterDateElement.Text : "";
            var RegisterNo          = (RegisterNoElement != null)? RegisterNoElement.Text : "";
            var ListNo              = (ListNoElement != null) ? ListNoElement.FindElement(By.XPath(".//a")).Text : "";
            var DocumentType        = (DocumentTypeElement != null) ? DocumentTypeElement.Text : "";
            return new CaseListEntry
            {
                ListNo = ListNo ,
                RegDate = DateTime.ParseExact(RegisterDate, "dd.MM.yyyy",
                CultureInfo.InvariantCulture),
                DocumentType = DocumentType
            };
        }).ToList();
        return entryList;
    }

public IWebElement GetElementOrNull(IList<IWebElement> CaseEntryTds, int elementAtPosition, int maxSeconds = 1) {
    IWebElement element = null;
    IWait<IWebDriver> wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(maxSeconds));
    wait.Until(d => {
        try {
            element = CaseEntryTds.ElementAt(elementAtPosition);
            return element.Displayed;
        } catch (WebDriverTimeoutException) {
            return false;
        } catch (NoSuchElementException) {
            return false;
        }
    });
  return element;

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章