C# 控件上存在CodedUI Selenium QTAgent32.exe旧元素引用异常

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

在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(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 ;