使用Selenium/Protractor Javascript切换到新窗口

Switching to new window with Selenium/Protractor Javascript

本文关键字:新窗口 窗口 Selenium Protractor Javascript 使用      更新时间:2023-09-26

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

我可以了解窗口何时显示,但我不相信我目前用于获取窗口"句柄"的代码是否正常工作。我的情况有点不同,因为我在页面中使用量角器,但出现的新窗口不是基于角度的,所以我必须在该窗口中切换到只使用selenium WebDriver。(有人知道这种方法是否存在问题吗?)

下面你可以找到我用来创建selenium驱动程序的代码片段,以及下面试图"切换到/抓取"弹出的新窗口的代码片段。我知道它不能正常工作,因为我在尝试在页面上查找表单时,在后面的代码中不断收到"No Soke 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)"行中的"browser",使其读作"driver.switchTo().window(popUpHandle。如果我只使用上面显示的代码,这个错误就会被清除。

  2. 我不能100%确定我应该使用量角器(全局"浏览器"var)还是使用我在此之前设置的直接"驱动程序"(Selenium)来获取窗口。

感谢您的帮助

从最新版本的Protractor(v2.2)开始,使用量角器窗口句柄应该不会有问题,它会返回当前显示的窗口数组。正如P.T所指出的,不需要调用单独的驱动程序实例,但browser全局变量会起作用。调用弹出窗口的数组索引为0,弹出窗口将具有1的数组索引。以下是切换到弹出窗口进行操作的示例。

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

希望这能有所帮助。

如果您要单击任何链接或按钮以打开弹出窗口,请使用browser.sleep(ms)在单击后添加一些等待。

这对我有效,并消除了错误"缺少‘句柄’参数"

element(by.className("name")).click();
browser.sleep(10000); //This line is important
var winHandles=browser.getAllWindowHandles();
winHandles.then(function(handles) 
{
    var parentWindow=handles[0];
    var popUpWindow=handles[1];
    browser.switchTo().window(popUpWindow);
    browser.switchTo().window(parentWindow);
})

如果您正在调用https://url并再次重定向到http://url,则由于安全问题,将出现此弹出窗口。

1-您必须在https://http://

中配置两个应用程序

检查窗口是否可用,因为窗口的计数从0开始。所以,试着递减计数并使用,它可能会起作用。;)因为这对我来说是有效的。。