CodedUI Selenium QTAgent32.exe控件上存在过时元素引用异常

本文关键字:过时 元素 引用 异常 存在 Selenium QTAgent32 exe 控件 CodedUI | 更新日期: 2023-09-27 17:52:36

在Visual Studio, c#中,我做了这个测试:

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停止工作。

如果我注释掉按钮。

我真正尝试的是一个循环,它检查NewUser按钮是否存在,或者仪表板上是否存在一个字段,这样我就知道按钮单击的结果。

我的问题是当我运行测试时浏览器爆炸了

CodedUI Selenium QTAgent32.exe控件上存在过时元素引用异常

不要使用Exists,使用button.TryFind(),它会给你一个布尔值,不会导致异常。

注意:这是我解决这个问题的缓慢过程:在搜索之前减少Playback.PlaybackSettings.SearchTimeout,并在搜索完成后将其返回到默认值:

    var def = Playback.PlaybackSettings.SearchTimeout;
    Playback.PlaybackSettings.SearchTimeout = 1000;
    {
       Do workd
    }
    Playback.PlaybackSettings.SearchTimeout = def ;