getWindowHandle() Selenium Webdriver Javascript
getWindowHandle() Selenium Webdriver Javascript
在工程师的帮助下进行了一些更改。这是我用于获取新 window 句柄的最终代码:
localdriver = @driver
@driver.getAllWindowHandles()
.then (handles) ->
localdriver.switchTo().window(handles[1])
我目前 运行 是一个使用 Selenium Webdriver、Mocha、Chai 和 Grunt 的自动化堆栈。我在 Coffeescript 中创建脚本,但在 Javascript 中回答我的问题就完全没问题了。
我想做什么:
- 单击主浏览器上的按钮 window
- 将驱动程序切换到单击按钮后打开的第二个 window
- 秒执行操作window
- 将第二个 window 和 return 关闭到第一个。
我在互联网上搜索以寻找有关如何执行此操作的答案。几个月前才开始学习所有这些东西,但我仍然在创造东西时跌跌撞撞。我看到了很多 Java 和 C+ 示例,但在 Java 脚本方面并不多。谁能提供一个示例,说明如何使用 Selenium Webdriver 和 Javascript 为上述场景设置代码?
var parent = driver.getWindowHandle();
var windows = driver.getAllWindowHandles();
driver.switchTo().window(windows[1]);
// do some stuff
driver.close();
driver.switchTo().window(parent);
您想要的是 driver.getAllWindowHandles(),但因为这是 returns 承诺,请确保您随后使用 then
函数内部的句柄
// select the newly opened window
driver.getAllWindowHandles().then(function gotWindowHandles(allhandles) {
driver.switchTo().window(allhandles[allhandles.length - 1]);
});
每当打开新标签页时,都需要一些时间来显示和呈现。在这种情况下,很难切换选项卡,因为选项卡尚未打开并且 driver.getAllWindowHandles()
不会为该选项卡提供处理程序。我以这种方式解决了这个问题,我假设我有一个打开的选项卡并单击某个按钮,我正在打开新的第二个选项卡。
function openNewTab(driver) {
driver.wait(function () {
return driver.getAllWindowHandles().then(function (handles) {
var isHandleCount2 = (handles.length == 2);
if (isHandleCount2) {
driver.switchTo().window(handles[1]);
}
return isHandleCount2;
});
}).then(function () {
// Now do some stuff in new tab
var buttonElement = driver.wait(until.elementLocated(By.xpath("//td[*//span[text()='Click me']]")));
buttonElement.click();
});
}
此代码将等待,直到句柄或制表符的数量不等于 2。
@Jai Prak 的回答很精彩。
三个或更多选项卡的情况呢?
最新的标签永远是最后一个标签。
return await driver.wait(async function () {
return await driver.getAllWindowHandles().then(async function (handles) {
// var isHandleCount2 = (handles.length == 2);
if (handles.length > 1) {
return driver.switchTo().window(handles[handles.length - 1]);
}
return false;
});
}).then(function () {
// Now do some stuff in new tab
});
除了在选项卡之间切换的情况外,以上内容将适用。
要移动下一个选项卡,请获取当前选项卡的 index -1
在工程师的帮助下进行了一些更改。这是我用于获取新 window 句柄的最终代码:
localdriver = @driver
@driver.getAllWindowHandles()
.then (handles) ->
localdriver.switchTo().window(handles[1])
我目前 运行 是一个使用 Selenium Webdriver、Mocha、Chai 和 Grunt 的自动化堆栈。我在 Coffeescript 中创建脚本,但在 Javascript 中回答我的问题就完全没问题了。
我想做什么:
- 单击主浏览器上的按钮 window
- 将驱动程序切换到单击按钮后打开的第二个 window
- 秒执行操作window
- 将第二个 window 和 return 关闭到第一个。
我在互联网上搜索以寻找有关如何执行此操作的答案。几个月前才开始学习所有这些东西,但我仍然在创造东西时跌跌撞撞。我看到了很多 Java 和 C+ 示例,但在 Java 脚本方面并不多。谁能提供一个示例,说明如何使用 Selenium Webdriver 和 Javascript 为上述场景设置代码?
var parent = driver.getWindowHandle();
var windows = driver.getAllWindowHandles();
driver.switchTo().window(windows[1]);
// do some stuff
driver.close();
driver.switchTo().window(parent);
您想要的是 driver.getAllWindowHandles(),但因为这是 returns 承诺,请确保您随后使用 then
函数内部的句柄
// select the newly opened window
driver.getAllWindowHandles().then(function gotWindowHandles(allhandles) {
driver.switchTo().window(allhandles[allhandles.length - 1]);
});
每当打开新标签页时,都需要一些时间来显示和呈现。在这种情况下,很难切换选项卡,因为选项卡尚未打开并且 driver.getAllWindowHandles()
不会为该选项卡提供处理程序。我以这种方式解决了这个问题,我假设我有一个打开的选项卡并单击某个按钮,我正在打开新的第二个选项卡。
function openNewTab(driver) {
driver.wait(function () {
return driver.getAllWindowHandles().then(function (handles) {
var isHandleCount2 = (handles.length == 2);
if (isHandleCount2) {
driver.switchTo().window(handles[1]);
}
return isHandleCount2;
});
}).then(function () {
// Now do some stuff in new tab
var buttonElement = driver.wait(until.elementLocated(By.xpath("//td[*//span[text()='Click me']]")));
buttonElement.click();
});
}
此代码将等待,直到句柄或制表符的数量不等于 2。
@Jai Prak 的回答很精彩。
三个或更多选项卡的情况呢?
最新的标签永远是最后一个标签。
return await driver.wait(async function () {
return await driver.getAllWindowHandles().then(async function (handles) {
// var isHandleCount2 = (handles.length == 2);
if (handles.length > 1) {
return driver.switchTo().window(handles[handles.length - 1]);
}
return false;
});
}).then(function () {
// Now do some stuff in new tab
});
除了在选项卡之间切换的情况外,以上内容将适用。
要移动下一个选项卡,请获取当前选项卡的 index -1