2012-01-12 91 views
0

我得到陈旧的引用异常(元素不再有 有效),我正在使用c# - Webdriver进行自动化。EventFiringWebDriver监听器的陈旧引用异常

我使用Selenium进行自动化框架。在此我已使用Selenium Event的EventFiringWebDriver类 。它侦听InterenetExplorerWebdriver(Like 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)/

回答

0

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

所以,如果你想:页面上

  1. 寻找元素
  2. 使元素消失(如打开另一个页面)
  3. 日志元素的name

您需要:

  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' 
+0

这种做法会增加不必要的code.Because每一个我处理的执行过程中,我将不得不增加额外的code.In事件元素EventListener类的我只需要编写一次XML日志记录逻辑。 – 2012-01-12 08:18:35

+0

我打算使用EventDriver类是以XML格式获取详细的执行报告..所以我们有任何其他选项来做到这一点.. – 2012-01-12 08:22:27

相关问题