【发布时间】:2015-05-01 12:35:48
【问题描述】:
寻求一些帮助,了解我应该如何获得一个新的“弹出”窗口,该窗口在我单击“登录”按钮后触发显示。
我能够到达窗口何时显示,但我不相信我当前用于抓取窗口“句柄”的代码工作正常。我的情况有点不同,因为我在我的页面中使用量角器,但是出现的新窗口不是基于角度的,所以当我在那个窗口中时,我必须切换到只使用 selenium WebDriver。 (有人知道这种方法是否存在问题?)
您可以在下面找到我用来创建 selenium 驱动程序的代码 sn-p,以及尝试“切换到/抓取句柄”弹出的新窗口的代码。我知道它无法正常工作,因为在尝试在页面上查找表单之后的代码中不断收到“没有这样的元素”错误。
// 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:未知错误:'name'必须是非空字符串”的错误在对此进行一些搜索后,这是因为驱动程序上的“switchTo()”方法不能为空。如果我只使用上面显示的代码,这个错误就会被清除。
我不能 100% 确定我应该使用量角器(全局“浏览器”变量)还是使用在此之前设置的直接“驱动程序”(Selenium)作为获取窗口的方式。
感谢您的帮助
【问题讨论】:
-
如果您已经在工作量角器驱动程序的上下文中,则无需在内部启动单独的 webdriver-instance。 (这可能会使浏览器混淆有两个遥控器)。 Protractor 通过
browser.driver公开其使用的原始网络驱动程序,因此应该可以正确使用。 -
这是我的主要问题。谢谢你。一旦我取出设置另一个驱动程序,然后在几次迭代后重新使用 browser.driver,我就能让它工作。
标签: javascript angularjs selenium protractor