我需要帮助,想知道在点击“登录”按钮后如何获取一个新的“弹出”窗口。
我可以获取到窗口显示的时机,但是我认为我当前使用的代码无法正确地抓取窗口“句柄”。我的情况有点不同,因为我在页面内使用protractor,但新窗口不基于Angular,所以我必须切换到在该窗口中使用Selenium WebDriver。(是否有人知道这种方法可能会存在问题?)
下面是我正在使用的代码片段,用于创建Selenium驱动程序,并试图“切换/抓取”弹出的新窗口的句柄。 我知道它没有正常工作,因为在接下来的代码中尝试查找页面上的表单时,我一直收到“没有这样的元素”的错误消息。
// Create selenium webdriver / driver
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
// Now make sure that the new window is popping up and we are navigating correctly to it
var handlePromise = browser.driver.getAllWindowHandles();
handlePromise.then(function (handles) {
// parentHandle = handles[0];
var popUpHandle = handles[1];
// Change to new handle
browser.driver.switchTo().window(popUpHandle);
var popUpHandleFinal = browser.driver.getWindowHandle();
expect(popUpHandleFinal).toEqual(popUpHandle);
});
关于此事有几点需要注意:
如果我在这行代码中移除 "browser",变成 "driver.switchTo().window(popUpHandle)",则会收到一个错误信息,其内容为 "UnknownError: unknown error: 'name' must be a nonempty string" 经过一番搜索之后发现,这是因为驱动程序上的 "switchTo()" 方法不能为 null。只需使用上述代码即可清除此错误。
我不确定应该使用protractor(全局 "browser" 变量),还是使用我在此之前设置的原生 "driver" (Selenium)来获取弹出窗口。
感谢您的帮助。
browser.driver
公开其正在使用的原始 webdriver,因此应该正确使用。 - P.T.