WindowHandles的顺序

时间:2015-02-27 20:50:45

标签: c# selenium selenium-webdriver webdriver

我遇到的问题是WebDriver似乎改变了WindowHandles的顺序。这导致我们在某些情况下获得它们之后间歇性地关闭错误的一个。

似乎发生的事情是先前建立的第一个窗口句柄作为后续句柄返回,这导致我的逻辑当然关闭了错误的句柄。

WebDriver是否应该每次以相同的顺序返回窗口句柄(第一个打开的窗口的顺序为何?)。这是我最初的预期,但现在我不太确定。

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

以下是我关闭活动窗口并切换回根窗口的方法。

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#绑定中的活动窗口,那么很可能也会解决这个问题。

1 个答案:

答案 0 :(得分:2)

根据我的理解,这个弹出窗口处理程序是完全无序的。我记得在SO上进行了同样的对话,幸运的是JimEvans(Selenium的贡献者之一)插话并澄清了一些因素。我阅读了PopupWindowFinder Selenium .NET绑定,并发现该课程可以让您的生活更轻松。 API为here。但是,整个订单问题处理起来非常复杂和痛苦。请参阅this主题。只是不想重新发明轮子。