使用Selenium/Protractor Javascript切换到新窗口
Switching to new window with Selenium/Protractor Javascript
正在寻找有关如何获得新的"弹出"窗口的帮助,该窗口将在我单击"登录"按钮后触发显示。
我可以了解窗口何时显示,但我不相信我目前用于获取窗口"句柄"的代码是否正常工作。我的情况有点不同,因为我在页面中使用量角器,但出现的新窗口不是基于角度的,所以我必须在该窗口中切换到只使用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);
});
关于这个:
如果我删除"browser.driver.switchTo().window(popUpHandle)"行中的"browser",使其读作"driver.switchTo().window(popUpHandle。如果我只使用上面显示的代码,这个错误就会被清除。
我不能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开始。所以,试着递减计数并使用,它可能会起作用。;)因为这对我来说是有效的。。
- GWT获取新旧窗口大小
- 如何在新标签/窗口中编写文本文档
- 如何在鼠标悬停在另一个图像/链接上时显示新图像/窗口
- 从服务器 c# 打开 Outlook 新邮件窗口
- 获取用户输入以设置新的窗口参数
- 为什么我不能创建新的窗口实例
- 在c中按下一个按钮,打开两个新的窗口/选项卡(不同的外部站点)
- 在新浏览器/窗口上单击提交按钮后打开PHP操作
- 如何恢复窗口,而不是打开一个新的窗口,如果它有相同的url(仍然从上一个打开)
- 如何在不制作另一个新选项卡或新浏览器窗口的情况下在同一网页中播放MPG视频/音频文件
- 如何打开一个新的窗口/选项卡没有用户的干预,而不让它被阻止
- 打开所有链接不是我的网站的一部分,在新的窗口与jquery
- 打开一个新的窗口,而浏览器没有给出警告,这是一个弹出
- 在新的窗口jquery功能不工作
- 如何使图标出现在一个新的窗口
- 如何重定向到一个新的窗口后,点击选择关于html的选项
- 如何强制电子邮件链接打开在新的窗口
- 显示更多的信息悬停在一个新的窗口,如在facebook
- 如何使用谷歌签名与重定向,而不是一个新的窗口
- 在新的窗口打开页面,没有弹出阻止使用JavaScript目标_blank