使用 Selenium/Protractor Javascript 切换到新的 window
Switching to new window with Selenium/Protractor Javascript
正在寻求一些帮助,了解我应该如何获得一个新的 "pop-up" window,它在我单击 "login" 按钮后被触发显示。
我可以在 window 显示时到达,但我不相信我当前用于获取 window "handle" 的代码工作正常。我的情况有点不同,因为我在我的页面中使用量角器,但是出现的新 window 不是基于 angular 的,所以我必须切换到只使用 selenium WebDriver window。 (有人知道这种方法是否有问题吗?)
您可以在下面找到我用来创建 selenium 驱动程序的代码片段,以及试图 "switch to / grab handle" 弹出的新 window 的代码片段。我知道它无法正常工作,因为我在试图在页面上查找表单的代码中不断收到 "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);
});
关于这件事的一些事情:
如果我删除 "browser.driver.switchTo().window(popUpHandle)" 行中的 "browser",所以它显示为 "driver.switchTo().window(popUpHandle)" 我收到返回错误,显示为“UnknownError: unknown error: 'name' 必须是一个非空字符串” 在对此进行一些搜索后,这是因为驱动程序上的 "switchTo()" 方法不能为空。如果我只使用上面显示的代码,这个错误就会被清除。
我不是 100% 确定我应该使用量角器(全局 "browser" 变量)还是使用我之前设置的直接 "driver" (Selenium) 作为获取 windows 的方法。
感谢您的帮助
从最新版本的量角器 (v2.2) 开始,使用量角器 window 句柄应该没有问题,returns 当前正在处理的 windows 数组显示。正如 P.T 指出的那样,无需调用单独的驱动程序实例,但 browser
全局变量将起作用。调用弹出窗口的 window 的数组索引为 0
,弹出窗口 window 的数组索引为 1
。下面是切换到弹出窗口 window 进行处理的示例。
browser.getAllWindowHandles().then(function(handles){
browser.switchTo().window(handles[1]).then(function(){
//do your stuff on the pop up window
});
});
希望对您有所帮助。
如果您单击任何 link 或按钮以打开弹出窗口 window,请在单击后使用 browser.sleep(ms)
添加一些等待时间。
这对我有用并且消除了一个错误"missing 'handle' parameter"
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://
中配置这两个应用程序
正在寻求一些帮助,了解我应该如何获得一个新的 "pop-up" window,它在我单击 "login" 按钮后被触发显示。
我可以在 window 显示时到达,但我不相信我当前用于获取 window "handle" 的代码工作正常。我的情况有点不同,因为我在我的页面中使用量角器,但是出现的新 window 不是基于 angular 的,所以我必须切换到只使用 selenium WebDriver window。 (有人知道这种方法是否有问题吗?)
您可以在下面找到我用来创建 selenium 驱动程序的代码片段,以及试图 "switch to / grab handle" 弹出的新 window 的代码片段。我知道它无法正常工作,因为我在试图在页面上查找表单的代码中不断收到 "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);
});
关于这件事的一些事情:
如果我删除 "browser.driver.switchTo().window(popUpHandle)" 行中的 "browser",所以它显示为 "driver.switchTo().window(popUpHandle)" 我收到返回错误,显示为“UnknownError: unknown error: 'name' 必须是一个非空字符串” 在对此进行一些搜索后,这是因为驱动程序上的 "switchTo()" 方法不能为空。如果我只使用上面显示的代码,这个错误就会被清除。
我不是 100% 确定我应该使用量角器(全局 "browser" 变量)还是使用我之前设置的直接 "driver" (Selenium) 作为获取 windows 的方法。
感谢您的帮助
从最新版本的量角器 (v2.2) 开始,使用量角器 window 句柄应该没有问题,returns 当前正在处理的 windows 数组显示。正如 P.T 指出的那样,无需调用单独的驱动程序实例,但 browser
全局变量将起作用。调用弹出窗口的 window 的数组索引为 0
,弹出窗口 window 的数组索引为 1
。下面是切换到弹出窗口 window 进行处理的示例。
browser.getAllWindowHandles().then(function(handles){
browser.switchTo().window(handles[1]).then(function(){
//do your stuff on the pop up window
});
});
希望对您有所帮助。
如果您单击任何 link 或按钮以打开弹出窗口 window,请在单击后使用 browser.sleep(ms)
添加一些等待时间。
这对我有用并且消除了一个错误"missing 'handle' parameter"
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://
中配置这两个应用程序