EventFiringWebDriver侦听器的过时引用异常

时间:2012-01-12 04:56:51

标签: c# selenium webdriver

我收到Stale引用异常(Element不再 有效),我使用c# - Webdriver进行自动化。

我正在使用Selenium来实现自动化框架。在那我用过 EventFiringWebDriver类的Selenium事件。听取每一个人的意见 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.
   }

}

在我使用硒自动化的应用程序中。我有一些文字 框和按钮,EventFiringWebDriver类XMLLogging工作 通过测试用例执行正确的文本框但是 对于按钮或链接,它有时会给出“元素号” 更长的有效“陈旧的引用异常(某些按钮属于 类型展开崩溃导致DOM更改,并在我的应用程序中 我有一个任务页面,它定期刷新 经常出现陈旧的引用异常)

Webdriver点击在整个执行过程中正常工作但是 EventFiringWebDriver无法识别对象和Stale引用 异常来了

请帮帮我......或者请告诉我获取细节的方法 网页对象(如按钮,链接),以便我可以实现 记录功能(我使用的是C#-webdriver)/

1 个答案:

答案 0 :(得分:0)

StaleElementReferenceException表示您正在访问不再存在的元素的属性。 您需要在DOM更改之前收集元素的所有必需属性值。

所以如果你想:

  1. 在页面上找到元素
  2. 使元素消失(例如打开另一页)
  3. 记录该元素的名称
  4. 你需要:

    1. 在页面上找到元素
    2. 将元素的名称存储在变量(my_elements_name
    3. 使元素消失(例如打开另一页)
    4. 使用my_elements_name变量记录该元素的名称,而不是元素本身。
    5. 在python中它看起来像这样:

      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'