打开新标签页(第二页)后,我正试图切换到第一个标签页。
common.clickOpenNewSession(); //it opens the new tab
browser.getAllWindowHandles().then(function (handles) {
var secondWindowHandle = handles[1];
var firstWindowHandle = handles[0];
browser.switchTo().window(secondWindowHandle).then(function () { //the focus moves on new tab
browser.sleep(3000);
expect(browser.driver.getCurrentUrl()).toContain("url");
//do some actions
});
//below it doesn't work. I try to go back on previous tab without closing the second tab
browser.actions().sendKeys(protractor.Key.CONTROL).sendKeys(protractor.Key.TAB).perform();
browser.sleep(4000);
browser.driver.switchTo().window(firstWindowHandle);
browser.setLocation('http://google.com');
});
答案 0 :(得分:9)
问题是您尝试使用ctrl + tab转到上一个选项卡,而不是使用窗口句柄切换回来。 WebDriver不支持此功能,因为使用ctrl + tab是系统操作,无法在浏览器上为所有操作系统/浏览器模拟。只需再次使用browser.switchTo()
。
答案 1 :(得分:7)
@Aaron此代码获取所有可用的浏览器句柄并解析承诺。然后打开由<a href='newlink' target='_blank'>Link</a>
创建的标签:
POFile.buttonWithABlankTarget.click().then(function() {
browser.getAllWindowHandles().then(function(handles) {
var newTabHandle = handles[1];
browser.switchTo().window(newTabHandle).then(function () {
// Expect the newly opened tab URL to equal the href of the invitation
expect(browser.driver.getCurrentUrl()).toContain("http://...");
});
});
});
以同样的方式,您可以在标签之间切换:
it("should open the first tab", function() {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[0]);
});
});
当然,请关闭一个标签:
it("should close the second tab and return to the first tab", function() {
browser.getAllWindowHandles().then(function (handles) {
// We currently are on the second tab...
browser.driver.close();
browser.switchTo().window(handles[0]);
});
});
希望这有帮助!