【问题标题】:Timeout while Internet Explorer busy error when Browser.AttachToBrowser.AttachTo 时 Internet Explorer 忙时超时错误
【发布时间】:2015-09-08 10:24:43
【问题描述】:

由于 Internet Explorer 忙时超时错误,我的一些测试似乎随机失败。

WatiN.Core.Exceptions.TimeoutException: Timeout while Internet Explorer busy

他们的错误似乎只在以下代码行引起:

WatiN.Core.Browser.AttachTo[T](Constraint constraint)

我的设置方法:

[SetUp]
[Timeout(1000)]
public void WithAnInstanceOfTheBrowser()
{
    Settings.AttachToBrowserTimeOut = 200;
    Settings.WaitUntilExistsTimeOut = 200;
    Settings.WaitForCompleteTimeOut = 200;
    Settings.SleepTime = 60;

    BrowserExtension.KillAllIEProcess();

    var securePassword = new SecureString();
    foreach (var c in UserConfig.GetConfigPassword())
    {
        securePassword.AppendChar(c);
    }

    string address = UserConfig.GetConfigUrl();
    string username = UserConfig.GetConfigUserName();
    ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Internet Explorer\iexplore.exe", address);
    startInfo.UserName = username;
    startInfo.Password = securePassword;
    startInfo.UseShellExecute = false;
    startInfo.LoadUserProfile = true;
    Process.Start(startInfo);
    _browser = Browser.AttachTo<IE>(Find.ByUrl(UserConfig.GetConfigUrl()));
}

_browser 是类级别的全局变量:

IE _browser;

然后在测试中,我在打开的窗口上执行了一些操作,其中一个操作是单击一个按钮,该按钮会在应用程序中打开一个新选项卡。 然后为了获得对这个新页面的引用,我使用以下行:

Thread.Sleep(6000); //even sleeping but to no avail
Browser workItem = Browser.AttachTo<IE>(Find.ByTitle(new Regex(workItemRegex)));

这似乎会随机抛出错误,有时会起作用,有时会出错。

我不太确定这里出了什么问题,因为这似乎是合乎逻辑的。

在测试的 TearDown 中,所有 IE 进程都被杀死,_browser 被设置为 null。

有什么想法吗?

【问题讨论】:

    标签: c# .net watin mbunit


    【解决方案1】:

    我以前见过这种情况,我在尝试关闭并重新打开 IE,然后重新连接到浏览器时发生了这种情况。但是,虽然我找不到它为什么失败的逻辑解释,但我确实找到了它为什么对我超时(至少在我的情况下),这是因为即使你在实例化一个新对象之前杀死了 IE 对象,关闭IE 的时间比预期的要长(相信我,我已经尝试了几分钟)所以对我来说唯一的解决方案就是在创建一个新进程之前终止我正在使用的进程,从那一刻起我没有任何问题。希望这对您的情况有所帮助。

    【讨论】:

    • 我已经通过使用 AttachToNoWait 和 Thread.Sleep(XXXX) 的组合解决了这个问题。我还尝试构建不同的测试结构,因为我将正在处理的当前窗口传递给辅助方法,而不是创建对特定页面的引用作为辅助方法的一部分。我会接受您的回答,因为根据我的经验,这正是导致问题的原因。这些只是我使用过的一些变通方法。
    • 我以前去过那里,我使用过一个实例并在类之间移动它,但我也发现除了运行另一个实例并附加到它之外别无选择,然后杀死该实例并重新启动,在这种情况下,杀死进程效果很好。
    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 2012-03-23
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2012-10-26
    相关资源
    最近更新 更多