我得到了过时的引用异常(元素不再有效),我正在使用c# - Webdriver自动化。
我正在使用Selenium作为自动化框架。在此,我使用了Selenium事件的EventFiringWebDriver类。它侦听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.
}}
在我的应用程序中,我使用selenium实现了自动化。我有一些文本框和按钮,EventFiringWebDriver类XMLLogging在整个测试用例执行过程中对文本框正确工作,但对于一些按钮或链接,它提供了“元素不再有效”的陈旧引用异常(有些按钮的展开折叠类型导致DOM更改,而在我的应用程序中,任务页面有一个任务页面,它会定期刷新,因为陈旧的引用异常经常出现)
Webdriver单击整个执行过程中的工作正常,但是EventFiringWebDriver无法识别对象,并且出现过时的引用异常。
请帮帮我..。或者,请建议我如何获得网页对象的详细信息(如按钮、链接),以便实现日志功能(我使用的是C#-webdriver)/
发布于 2012-01-12 07:32:53
StaleElementReferenceException意味着您正在访问元素的属性,该属性不再存在。在DOM更改之前,您需要收集元素的所有所需属性值。
所以如果你想:
你需要:
页上的
my_elements_name变量而不是元素本身来记录元素的名称。在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'https://stackoverflow.com/questions/8830321
复制相似问题