当前位置: 首页 > 面试题库 >

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

陈康胜
2023-03-14
问题内容

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

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

谢谢您的帮助


问题答案:

从最新版本的量角器(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
    });
});

希望这可以帮助。



 类似资料:
  • 问题内容: 寻找有关如何获得新的“弹出”窗口的帮助,该窗口在单击“登录”按钮后触发显示。 我能够到达显示窗口的时间,但是我不相信我当前用来获取窗口“句柄”的代码是否正常运行。我的情况有所不同,因为我在页面内使用量角器,但是出现的新窗口不是基于角度的,因此当我在该窗口中时,必须切换为仅使用Selenium WebDriver。(任何人都不知道这种方法是否有问题?) 在下面,您可以找到我用来创建sel

  • 我一直在寻找这个问题的答案。我正在IE8中使用Selenium Webdriver和C#进行测试。在测试的某一点上,我需要单击一个按钮,然后打开一个新的应用程序窗口,其中包含需要填写的表单以继续测试。 我试过: 所以应该点击开始弹出事件的元素,然后开关应该把它放在弹出窗口上,这样我就可以继续测试了。现在的问题是。当单击时,我正在测试的应用程序创建一个弹出窗口,然后关闭该弹出窗口,然后出现另一个弹出

  • 我正在使用Python进行selenium自动化项目。 我面临一个问题,这是处理多个浏览器窗口。 场景如下所示。当我单击主页上的链接时,将打开一个新窗口。在新打开的窗口中,我无法执行任何操作,因为焦点仍然在主页web驱动程序上。 谁能告诉我如何将焦点从背景窗口转换到新打开的窗口? 一种可能的解决方案是,但它需要窗口的名称。如何找出窗口的名字?如果这是一个错误的方法,谁能给出一些代码例子来执行这个操

  • 我已经编写了一个Ruby脚本来自动化使用IE的一些用户操作。我正在为IE使用Selenium Web驱动程序。下面是我的代码。 在点击一个按钮后,会打开一个新页面。现在,当我尝试切换到新窗口时,我得到以下错误。 我试着通过修改防火墙和为端口5555添加规则来解决这个错误。即便如此,问题仍然存在。我发现了一些关于这方面的问题,但大多数都与Java或.NET有关。如何解决此错误?有人能给我指个正确的方

  • 目前,我已经开始使用Selenium2.0/Web-Driver为我工作的公司进行自动化测试。 目前我已经开发了大约20个测试,但是当我运行这些测试时,它们会为每个测试打开一个新的浏览器窗口。 我在注册测试用例中运行它,然后 在第二个测试用例中运行,我认为应该将焦点放回第一个窗口。 我还使用关闭正在创建的其他窗口,但我希望它们一开始就不打开。