RSelenium StaleElementReference ошибка в lapply - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь очистить связь с Rselenium. Иногда - только иногда, и это не тиражируется (причина, когда я повторно запускаю код, проблема исчезает) - программа выдает мне ошибку следующим образом:

Error:   Summary: StaleElementReference
     Detail: An element command failed because the referenced element is no longer attached to the DOM.
     class: org.openqa.selenium.StaleElementReferenceException
     Further Details: run errorDetails method 

Я думаю, это потому, что я щелкнул веб-элемент, и DOM каким-то образом изменился после щелчка (см. этот ответ: RSelenium throwing StaleElementReference error ). В этом случае мой код должен щелкнуть по всей стрелке «развернуть» веб-ссылки, чтобы показать полный текст. Но рассматриваемый здесь щелчок обернут в функцию sapply следующим образом, поэтому я не могу каждый раз перемещать веб-элемент:

  arrow = remDr$findElements(using = 'class', value = "WB_text_opt")    #locate the arrows
  sapply(arrow, function(x){
    Sys.sleep(0.15)
    x$clickElement()
    })                  # click on them
  remDr$findElement('css', 'html')$sendKeysToElement(list(key = "end"))   # scroll the webpage down

1 Ответ

1 голос
/ 22 апреля 2020

Ссылка на селен для элементов в списке arrow будет обновлена ​​при нажатии на элемент списка со стрелкой в ​​вашей функции. Вот почему вы получаете staleElementException. Пожалуйста, получите указанный элемент c в l oop, используя xpath / get элементы, затем укажите указатель c на элемент стрелки, используя индекс, и затем щелкните по нему.

sapply(arrow, function(x){
    Sys.sleep(0.15)
    x$clickElement() #<== This line will work only for the first iteration.
                     # you will get issue from the 2nd item as the element references
                     # updates, when you click on 1st item.
                     # Try using something like .findElements()[index]
    })  
...