有没有办法关闭WebDriver或Protractor中的选项卡?

Aar*_*ron 31 selenium selenium-webdriver protractor

有没有办法通过Protractor或WebDriver关闭标签?

我问,因为虽然我知道如何以编程方式切换标签,但它没有将活动标签置于前台.我无法总是告诉我在SauceLabs上运行的E2E测试中发生了什么,因为当我查看屏幕投射时,它显示的是我导航离开的标签,而不是活动标签.

我错了吗?

it('should do something in the previous tab', function(done) {
    browser.getAllWindowHandles().then(function (handles) {
        browser.switchTo().window(handles[0]);
        // do something
        expect(something).toEqual(thisThing);
        done();
    });
});
Run Code Online (Sandbox Code Playgroud)

Sak*_*gla 59

您可以尝试以下方法:

切换到新打开的选项卡.关闭当前窗口(在本例中为新选项卡).切换回第一个窗口.

browser.getAllWindowHandles().then(function (handles) {
    browser.driver.switchTo().window(handles[1]);
    browser.driver.close();
    browser.driver.switchTo().window(handles[0]);
});
Run Code Online (Sandbox Code Playgroud)

  • C# 版本 var tabs = driver.WindowHandles; if (tabs.Count > 1) { driver.SwitchTo().Window(tabs[1]); 驱动程序.关闭(); driver.SwitchTo().Window(tabs[0]); } (2认同)

ale*_*cxe 12

首先,selenium不提供可靠的跨浏览器API来使用浏览器选项卡.打开或关闭选项卡的常用方法(虽然不太可靠)是为Chrome调用浏览器快捷方式:

  • 打开标签:CTRL/ COMMAND+T
  • 关闭标签:CTRL/ COMMAND+W

在量角器中,找到body元素并"发送密钥":

var body = element(by.tagName("body"));
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "t"))
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "w"))
Run Code Online (Sandbox Code Playgroud)

或者,使用browser.actions():

browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('t').perform();
browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('w').perform();
Run Code Online (Sandbox Code Playgroud)

此外,要打开一个新的选项卡,有一个有趣的黑客(这里介绍),它基本上向a页面注入一个新元素并调用click鼠标事件:

function openNewTab (url) {
    return browser.driver.executeScript(function(url) {(
        function(a, url){
            document.body.appendChild(a);
            a.setAttribute('href', url);
            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'), url)
    );
    }, url)
};
Run Code Online (Sandbox Code Playgroud)

还有window.close()功能,但如果没有通过window.open()(参考)打开它,它将不会关闭标签.换句话说,如果这是您手动打开的选项卡,那么您可以window.open() -> window.close()在帮助下使用方法browser.executeScript().


Mar*_*owe 5

C#版本的Sakshi的答案:

   var tabs = driver.WindowHandles;
   if (tabs.Count > 1)
   {
       driver.SwitchTo().Window(tabs[1]);
       driver.Close();
       driver.SwitchTo().Window(tabs[0]);
   }
Run Code Online (Sandbox Code Playgroud)