如何使用protractor和Chrome浏览器打开一个新标签页
如何使用protractor和Chrome浏览器打开一个新标签页
这里有一段代码(不会打开新标签):\n
\n//在Chrome中打开新标签\n
\n
browser.actions().sendKeys(protractor.Key.CONTROL +'t').perform();
\n如果我们使用\'a\'的代码 - 一切正常:\n
\n//在页面上选择全部\n
\n
browser.actions().sendKeys(protractor.Key.CONTROL +'a').perform();
\nprotractor版本1.3.1\nChrome版本37\nChromeDriver版本2.10\nWebDriver版本2.43
原因:在使用Protractor和Chrome浏览器时,需要打开一个新的标签页。这个代码片段提供了一种方法来实现这一目标。
解决方法:创建一个Browser类,其中包含了打开新标签页的方法。首先,使用browser.executeScript('window.open()')来创建一个新的浏览器标签页。然后,使用browser.getAllWindowHandles()获取所有的窗口句柄,并选择需要切换的标签页的句柄,使用browser.switchTo().window(newWindowHandle)来切换到该标签页。最后,使用browser.get(url)来打开指定的URL。
这段代码使用了TypeScript和Protractor,可以直接在Protractor项目中使用。使用时,可以实例化Browser类,并调用openPageInNewTab方法,传入需要打开的URL。这样就可以在Chrome浏览器中打开一个新的标签页了。
问题的出现的原因是Selenium没有提供直接打开新标签页的方法,因此需要使用一种变通的方法来实现。其中尝试使用CTRL+T组合键打开新标签页的方式失败了,尝试在元素上执行该操作也没有成功。
解决方法是使用以下的hack方法,可以成功打开新标签页。可以将location.href
替换为所需打开的URL:
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'))); });
其中,还可以通过添加a.setAttribute('target', 'blank')
来设置新标签页的打开方式为在新窗口中打开。
问题的出现原因可能是需要在使用Protractor和Chrome浏览器时打开一个新的选项卡。解决方法是使用browser.executeScript()
方法来执行JavaScript代码,在新的选项卡中打开指定的URL。同时,需要使用browser.getAllWindowHandles()
方法获取所有的窗口句柄,并使用browser.switchTo().window()
方法切换到新打开的选项卡,以便访问其中的元素。
代码示例:
let url = "https://google.com"; return browser.executeScript("return window.open(arguments[0], '_blank')", url); browser.getAllWindowHandles().then((handles) => { browser.switchTo().window(handles[1]); })
更多关于window.open()
的信息,可以参考这里。