一尘不染

使用Selenium /量角器Javascript切换到新窗口

angularjs

寻找有关如何获得新的“弹出”窗口的帮助,该窗口在单击“登录”按钮后触发显示。

我能够到达显示窗口的时间,但是我不相信我当前用来获取窗口“句柄”的代码是否正常运行。我的情况有所不同,因为我在页面内使用量角器,但是出现的新窗口不是基于角度的,因此当我在该窗口中时,必须切换为仅使用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);
    });

几件事:

  1. 如果我删除“ browser.driver.switchTo()。window(popUpHandle)”行中的“浏览器”,因此其读为“ driver.switchTo()。window(popUpHandle)”,我会收到错误消息,并显示为“ UnknownError” :未知错误:“名称”必须是一个非空字符串”在进行一些搜索之后,这是因为驱动程序上的“ switchTo()”方法不能为空。如果我仅使用上面显示的代码,此错误将被清除。

  2. 我不确定100%是否应该使用量角器(全局“浏览器” var)或使用在此之前设置的直接“驱动程序”(Selenium)作为获取窗口的方式。

谢谢您的帮助


阅读 314

收藏
2020-07-04

共1个答案

一尘不染

从最新版本的量角器(v2.2)开始,使用量角器窗口句柄应该没有问题,它返回当前正在显示的窗口数组。正如PT指出的那样,无需调用单独的驱动程序实例,但可以使用browser全局变量。调用popup的窗口的数组索引为,0而popup窗口的数组索引为1。以下是切换到弹出窗口进行处理的示例。

browser.getAllWindowHandles().then(function(handles){
    browser.switchTo().window(handles[1]).then(function(){
        //do your stuff on the pop up window
    });
});

希望这可以帮助。

2020-07-04