新窗口句柄在 IE 中消失,无法切换到新窗口

2023-12-05

我在 Internet Explorer 10 中使用最新版本的 Selenium (2.37.0) 和 C#(使用最新的 32 位 InternetExplorerDriver,2.37.0)登录网页,单击打开新窗口的按钮,然后然后将焦点更改到新窗口。

最初我在 Firefox 中使用这段代码,它每次都会工作:

// Get handle for original window
string parentHandle = driver.CurrentWindowHandle;

// Click on button for new window
driver.FindElement(By.Id("buttonForNewWindow")).Click();

// Get list of all window handles
ReadOnlyCollection<string> allWindowHandles = driver.WindowHandles;

// Loop over all handles and switch to new child window
foreach (string handle in allWindowHandles)
{
    if (handle != parentHandle)
    {
        driver.SwitchTo().Window(handle);
    }
}

但这在 Internet Explorer 中不起作用。

我已经指出了问题所在。在打开新窗口之前,我使用driver.WindowHandles.Count获取窗口句柄的数量,并且(如预期的那样)它告诉我只有一个窗口句柄。然后,当我单击新窗口的按钮时,它告诉我(再次如预期)有两个窗口句柄。但在代码到达行之前driver.SwitchTo().Window(handle);,窗口句柄的数量又回落到一个,即使两个窗口仍然可见.

所以不知怎的,其中一个窗户把手丢失了。我已经确认(使用一堆Console.WriteLine语句)表明删除的窗口句柄是新窗口句柄。我也用过Stopwatch类来计时新窗口句柄被删除所需的时间:

Stopwatch sw = new Stopwatch();

// Wait until the number of windows has changed from 1 to 2
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until((_driver) => { return _driver.WindowHandles.Count != windowsBefore; });

// Start stopwatch
sw.Start();

int numberOfWindows = driver.WindowHandles.Count;

while (numberOfWindows == 2)
{
    numberOfWindows = driver.WindowHandles.Count;
}

sw.Stop();

Console.Write("\nTime elapsed: " + sw.ElapsedMilliseconds + " ms");

运行几次后,我发现窗口句柄的数量通常会回落到 1不到 50 毫秒。然而,有一次,窗把手的使用寿命要长得多。这是原始数字:

Time elapsed: 47 ms
Time elapsed: 31 ms
Time elapsed: 47 ms
Time elapsed: 2861 ms
Time elapsed: 30 ms

我也确认了在 Firefox 中不会出现此问题。当我在 Firefox 中运行相同的代码时,我发现窗口句柄的数量从 1 变为 2,并保持这种状态, 正如它应该。

看起来其他人也遇到这个问题以及。这个人发现当他们打开一个新窗口并等待 1000 毫秒时,getWindowHandles() 返回值 1 而不是 2。并且这个人Selenium Google Group 似乎也有同样的问题。

我的问题:鉴于新打开的窗口的句柄保持打开状态的时间(通常)不到 50 毫秒,使用 Selenium 在 Internet Explorer 10 中切换到新窗口的最有效方法是什么?或者我应该采取不同的措施来防止新的窗口句柄丢失?


只是想提供更新,以防其他人遇到同样的问题并找到此页面。我还没有找到解决我的问题的方法,但我想出了一个解决方法。

最初,我单击一个打开新窗口的链接,但在将 Selenium 导航到新窗口时遇到了问题。相反,我所做的是挖掘页面的源代码,找到我单击的按钮,并找出该按钮指向的位置。如果它是一个简单的超链接(www.whatever.com/....),那就更简单了,但它是一个 Javascript 函数。该 Javascript 函数使用一些固定字符和一些变量构建超链接;例如:

link(username, date) = "http://www.google.com/user=" + username + "?date=" + date;

因此,按照这个示例,我只是弄清楚要输入哪些变量(用户名、日期等),自己构建 URL,然后直接导航到它。因此,我什至根本不需要打开并导航到新窗口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新窗口句柄在 IE 中消失,无法切换到新窗口 的相关文章

随机推荐