Исключение устаревшей ссылки для прослушивателя EventFiringWebDriver - PullRequest
0 голосов
/ 12 января 2012

Я получаю исключение устаревшей ссылки (Элемент больше не действителен), я использую c # - Webdriver для автоматизации.

Я использую Selenium для инфраструктуры автоматизации.В этом я использовал EventFiringWebDriver класс Selenium Event.который слушает каждое событие InterenetExplorerWebdriver (например, Click () или SendKeys ()).В событиях класса EventFiringWebDriver, таких как (ElementClicked, ElementValueChanged), я реализовал логику, которая записывает атрибуты объекта WebElementEventArgs в файл журнала на основе XML.поэтому в конце выполнения я вижу подробности выполнения каждого теста в формате XSLT и отслеживаю функциональные ошибки.

код: -

public class SeleniumEventListener : EventFiringWebDriver
{
     public SeleniumEventListener(IWebDriver webDriver):base(webDriver)
     {
             ElementClicked += new EventHandler<WebElementEventArgs>SeleniumEventListener_ElementClicked);
//more events handled here..
 }
   void SeleniumEventListener_ElementValueChanged(object sender,WebElementEventArgs e)
 {
           LogPassedStep(e)
   }
   private LogPassedStep(e)
   {
          string title = e.Element.value;
            string status = "clicked"

         //XML based logging here.
   }

}

В моем приложении, которое я автоматизирую с помощью селена.У меня есть несколько текстовых полей и кнопок, класс XMLLogging EventFiringWebDriver корректно работает для текстовых полей во время выполнения тестового примера, но для кнопок или ссылок в некоторых случаях он дает исключение устаревшей ссылки «Элемент больше не действителен» (некоторые кнопкитипа Развернуть коллапс, который вызывает изменение DOM, и в моем приложении у меня есть страница Задача, которая обновляется с регулярным интервалом, в котором часто встречается исключение устаревшей ссылки)

Щелчки Webdriver работают правильно во время выполнения, ноEventFiringWebDriver не может распознать объект, и возникает исключение ссылки Stale

Пожалуйста, помогите мне ... или, пожалуйста, предложите мне способ получить эту информацию об объектах веб-страницы (таких как кнопка, ссылка), чтобы я мог реализовать функцию ведения журнала(Я использую C # -webdriver) /

1 Ответ

0 голосов
/ 12 января 2012

StaleElementReferenceException означает, что вы обращаетесь к атрибуту элемента, который больше не существует. Вам нужно собрать все необходимые значения атрибутов для элемента, прежде чем DOM изменится.

Итак, если вы хотите:

  1. найти элемент на странице
  2. заставить элемент исчезнуть (например, открыть другую страницу)
  3. записать имя этого элемента

вам нужно:

  1. найти элемент на странице
  2. сохранить имя элемента в переменной (my_elements_name)
  3. заставить элемент исчезнуть (например, открыть другую страницу)
  4. записать имя этого элемента, используя переменную my_elements_name, а не сам элемент.

В питоне это будет выглядеть так:

from selenium.webdriver import Firefox


browser = Firefox()
browser.get('http://google.com')

element = browser.find_element_by_id('lst-ib')
element_name = element.get_attribute('name')

browser.get('http://en.wikipedia.org')

# this will raise 'StaleElementReferenceException':
print element.get_attribute('name')

# and this will work:
print element_name
# prints out: 'q'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...