窗口句柄的顺序

Order of WindowHandles

我遇到 WebDriver 似乎更改 WindowHandles 顺序的问题。这导致我们在某些情况下得到它们后会间歇性地关闭错误。

似乎发生的是先前建立的第一个 window 句柄被 return 编辑为后续句柄,这导致我的逻辑当然会关闭错误的句柄。

WebDriver 是否应该每次都以相同的顺序 return 处理 window(首先打开的顺序 window 到最后?)。这是我最初的预期,但现在我不太确定了。

我还应该提到这个问题现在似乎只出现在 IE 中,但我不确定这是否是一个更普遍的问题。

这是我关闭活动 window 并切换回根 window 的方式。

public void Close()
        {
            //switch to latest window
            string windowName = string.Empty;
            if (_driver.WindowHandles.Count > 1)
            {
               //get 'root' window in list
                windowName = _driver.WindowHandles[0];
                _driver.Close();
                _driver.SwitchTo().Window(windowName);
            }
            else
            {
                _driver.Close();
            }
        }

我们使用的是 WebDriver 2.45(C# 绑定,32 位 IEDriver)。如果有一种方法可以关闭 C# 绑定中的活动 window,那么也很可能会解决此问题。

根据我的理解,此弹出 window 处理程序完全无序。我记得在 SO 上有过同样的对话,幸运的是 JimEvans(Selenium 的贡献者之一)插话并澄清了一些因素。我阅读了 Selenium .NET 绑定的 PopupWindowFinder,发现 class 可以让您的生活更轻松。 API 是 here. However, the whole order issue is entirely complex and painful to deal with. See this 线程。只是不想重新发明轮子。