C# 控件上存在CodedUI Selenium QTAgent32.exe旧元素引用异常
在C#Visual Studio中,我进行了以下测试:C# 控件上存在CodedUI Selenium QTAgent32.exe旧元素引用异常,c#,selenium-webdriver,coded-ui-tests,C#,Selenium Webdriver,Coded Ui Tests,在C#Visual Studio中,我进行了以下测试: BrowserWindow.CurrentBrowser = "chrome"; var browser = BrowserWindow.Launch(BaseURL + "/wizard"); var button = new HtmlButton(browser); button.SearchProperties.Add(HtmlButton.PropertyNames.Id, "NewUser"); ClickButton(bro
BrowserWindow.CurrentBrowser = "chrome";
var browser = BrowserWindow.Launch(BaseURL + "/wizard");
var button = new HtmlButton(browser);
button.SearchProperties.Add(HtmlButton.PropertyNames.Id, "NewUser");
ClickButton(browser, "Login");
Playback.Wait(10000);
try {
bool exists = button.Exists;
} catch {}
ClickButton启动一个javascript函数,该函数:
1. Hides all of the buttons.
2. initiates an ajax promise.
3. On Success, redirects to a dashboard page
4. On failure, un-hides the buttons.
正如您所想象的,在单击登录按钮10秒后,“NewUser”按钮肯定会消失/过时,因为我已登录
如果我调试,我可以看到我得到一个StaleElementReferenceException。如果我运行测试,浏览器会爆炸,说QTAgent32.exe已停止工作
如果我注释掉button.Exists行,则不会得到任何错误
我真正尝试的是一个循环,它检查是否存在NewUser按钮,或者仪表板上是否存在字段,因此我知道按钮单击的结果
我的问题是,当我运行测试时,浏览器会爆炸。使用
按钮而不是Exists.TryFind()
,它将为您提供一个布尔值,并且不会导致异常
注意:这会减慢流程-要解决此问题:
在搜索之前减少播放.PlaybackSettings.SearchTimeout,并在搜索完成后将其返回到默认值:
var def = Playback.PlaybackSettings.SearchTimeout;
Playback.PlaybackSettings.SearchTimeout = 1000;
{
Do workd
}
Playback.PlaybackSettings.SearchTimeout = def ;
不要使用Exists,而是使用
按钮.TryFind()
,它将为您提供一个布尔值,并且不会导致异常
注意:这会减慢流程-要解决此问题:
在搜索之前减少播放.PlaybackSettings.SearchTimeout,并在搜索完成后将其返回到默认值:
var def = Playback.PlaybackSettings.SearchTimeout;
Playback.PlaybackSettings.SearchTimeout = 1000;
{
Do workd
}
Playback.PlaybackSettings.SearchTimeout = def ;