当前位置: 首页 > 知识库问答 >
问题:

Selenium VB: OpenQA. Selenium.过时元素引用:元素未附加到页面文档

岳正浩
2023-03-14

我正在尝试使用LinkText单击一个元素。如:

myelement = driver.FindElement(By.LinkText(StoreFile))  'Click on report by name
logger.Debug("Report Found as " & myelement.Text)
If myelement Is Nothing Then
  GoTo endTry
Else
  myelement.Click()
  logger.Debug("Report clicked is " & StoreFile)
End If

但是,我得到以下错误:

The Error Is OpenQA.Selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
(Session info: chrome=66.0.3359.139)
(Driver info: chromedriver=2.35.528161 
(5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 6.1.7601 SP1 x86_64)
 at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
 at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
 at OpenQA.Selenium.Remote.RemoteWebElement.Click()
 at ExcelAddIn1.Ribbon1.BrandReview(String ReadFile).

即使元素在网页上可见,它也无法使用LinkText找到该元素,这有什么原因吗?有解决这个问题的方法吗,请帮忙?

共有2个答案

墨雨华
2023-03-14

我不熟悉vb.net,但必须用不同的语言处理网络驱动程序中的StaleElementReourceExceptions。问题是引用不再有效,我怀疑尝试捕捉它,然后再尝试第二次是否有效:引用仍然丢失,所以它可能会失败。此外,我将尽可能避免使用重试机制,因为您希望测试在每次运行时执行相同的操作。

我可能只是在每次需要时查找元素,而不是将其存储为变量,而是替换myelement。用鼠标单击()

driver.FindElement(By.LinkText(StoreFile)).Click()

目前尚不清楚的是,为什么会有if语句。如果找不到元素,则不能单击它。那么剩下的部分还能用吗?我假设以下步骤取决于成功单击元素。如果元素不存在,那么测试应该失败,对吗?

齐甫
2023-03-14

您可以尝试以下代码:

int attempts = 0;
while(attempts < 2) {
        try {
           driver.FindElement(By.LinkText(StoreFile)).Click()
           logger.Debug("Clicked on the link successfully")
           break;
           } 
         catch(StaleElementException e) {
            }
          attempts++;
      }
 类似资料: