在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按钮,或者是否存在仪表板上的字段,所以我知道按钮点击的结果。
我的问题是,当我运行测试时,浏览器会爆炸。
答案 0 :(得分:0)
使用button.TryFind()
而不是使用Exists,它将为您提供一个布尔值,并且不会导致异常。
注意:这是我的过程缓慢 - 解决这个问题:
在搜索之前减少Playback.PlaybackSettings.SearchTimeout
并在搜索完成后将其恢复为默认值:
var def = Playback.PlaybackSettings.SearchTimeout;
Playback.PlaybackSettings.SearchTimeout = 1000;
{
Do workd
}
Playback.PlaybackSettings.SearchTimeout = def ;