寻找有关如何获得新的“弹出”窗口的帮助,该窗口在单击“登录”按钮后触发显示。
我能够到达显示窗口的时间,但是我不相信我当前用来获取窗口“句柄”的代码是否正常运行。我的情况有所不同,因为我在页面内使用量角器,但是出现的新窗口不是基于角度的,因此当我在该窗口中时,必须切换为仅使用Selenium WebDriver。(任何人都不知道这种方法是否有问题?)
在下面,您可以找到我用来创建selenium驱动程序的代码段,以及在下面的“试图切换到/抓取新窗口”的代码段下。我知道它无法正常运行,因为在尝试在页面上查找表单的代码中不断收到“ No Such Element”错误。
// 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)”行中的“浏览器”,因此其读为“ driver.switchTo()。window(popUpHandle)”,我会收到错误消息,并显示为“ UnknownError” :未知错误:“名称”必须是一个非空字符串”在进行一些搜索之后,这是因为驱动程序上的“ switchTo()”方法不能为空。如果我仅使用上面显示的代码,此错误将被清除。
我不确定100%是否应该使用量角器(全局“浏览器” var)或使用在此之前设置的直接“驱动程序”(Selenium)作为获取窗口的方式。
谢谢您的帮助
从最新版本的量角器(v2.2)开始,使用量角器窗口句柄应该没有问题,它返回当前正在显示的窗口数组。正如PT指出的那样,无需调用单独的驱动程序实例,但可以使用browser全局变量。调用popup的窗口的数组索引为,0而popup窗口的数组索引为1。以下是切换到弹出窗口进行处理的示例。
browser
0
1
browser.getAllWindowHandles().then(function(handles){ browser.switchTo().window(handles[1]).then(function(){ //do your stuff on the pop up window }); });
希望这可以帮助。