Selenium VB: OpenQA.Selenium.StaleElementReferenceException: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь нажать на элемент, используя 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 ]

0 голосов
/ 08 мая 2018

Я не знаком с vb.net, но мне приходилось сталкиваться с исключениями StaleElementReferenceException с Webdriver на разных языках. Проблема в том, что ссылка больше не действительна, я сомневаюсь, что попытка ее перехвата, а затем повторная попытка сработает: ссылка все еще потеряна, так что, вероятно, она потерпит неудачу. Кроме того, я бы избегал максимально возможного использования механизмов повторных попыток, поскольку вы хотите, чтобы тест выполнял одни и те же действия при каждом его запуске.

Я бы, вероятно, просто искал элемент каждый раз, когда он вам нужен, и не сохранял бы его как переменную, заменив myelement.Click() на

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

Что непонятно, так это почему у вас есть оператор if. Если вы не можете найти элемент, вы не нажимаете на него. Оставшаяся часть вашего теста все еще работает? Я предполагаю, что следующие шаги зависят от успешного нажатия на элемент. Если элемента там нет, то тест не пройден, верно?

0 голосов
/ 08 мая 2018

Вы можете попробовать этот код:

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++;
      }
...