这是一个代码(新标签无法打开):
//在Chrome中打开新标签
browser.actions().sendKeys(protractor.Key.CONTROL +'t').perform();
如果我们使用'a'代码 - 一切都很好:
//在页面上选择全部
browser.actions().sendKeys(protractor.Key.CONTROL +'a').perform();
量角器v.1.3.1
Chrome v.37
ChromeDriver v.2.10
WebDriver v.2.43
答案 0 :(得分:4)
如果您真的不想在DOM中添加元素,那么您可以试试这个:
let url = https://google.com;
return browser.executeScript("return window.open(arguments[0], '_blank')", url);
//opens google.com in a new tab (works fine with Chrome. P.S. have only tested
// Chrome with Protractor).
我用browser.wait()
尝试了上述语句,看看你是否真的需要等待browser.executeScript()
返回一个承诺本身,只能利用诺言的成功。
此外,我观察到虽然浏览器的焦点似乎已更改为新打开的选项卡,但我无法访问新选项卡的元素。要做到这一点:
browser.getAllWindowHandles().then((handles) => {
browser.switchTo().window(handles[1]); // pass the index, here assuming that
// there are only two tabs in the browser
})
要详细了解window.open()
,您可以访问this.
答案 1 :(得分:3)
Selenium没有提供这样做的方法,因此解决方法似乎是唯一的方法。 假设您使用的是Windows或Linux,那么您的CTRL + T想法应该写成如下所示,但是对我来说黑客失败了:
browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('t').perform();
甚至尝试在元素上执行此操作:
$$('input').first().sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "t"));
好消息是以下黑客似乎确实有效,可以随意用您要打开的网址替换location.href
:
browser.driver.executeScript(function() {
(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
return e;
}(document.createEvent('MouseEvents'))))}(document.createElement('a')));
});
答案 2 :(得分:0)
我认为问题与#34;打开一个新标签"在ChromeDriver中,我发现了一个这样的错误: https://code.google.com/p/chromedriver/issues/detail?id=903&q=new%20tab&colspec=ID%20Status%20Pri%20Owner%20Summary
答案 3 :(得分:0)
这段代码对我来说适合带分度器的TypeScript。
import {browser} from 'protractor';
export class Browser {
public async openPageInNewTab(url: string) {
await this.createNewBrowserTab();
await this.switchToTabNumber(1);
await browser.get(url);
}
public createNewBrowserTab() {
browser.executeScript('window.open()');
}
public async switchToTabNumber(number: number) {
return browser.getAllWindowHandles().then(function (handles) {
const newWindowHandle = handles[number];
browser.switchTo().window(newWindowHandle);
});
}
}