Is there a way to close a tab in WebDriver or Protractor?

后端 未结 8 1266
悲&欢浪女
悲&欢浪女 2020-12-01 06:37

Is there a way to physically close a tab via Protractor or WebDriver?

I ask because while I know how to switch tabs programmatically, but it does not bring the acti

8条回答
  •  攒了一身酷
    2020-12-01 06:54

    First of all, selenium does not provide a reliable cross-browser API to work with browser tabs. A common approach to open or close a tab (although not quite reliable) is to invoke browser shortcuts for Chrome:

    • open tab: CTRL/COMMAND + T
    • close tab: CTRL/COMMAND + W

    In protractor, find the body element and "send keys" to it:

    var body = element(by.tagName("body"));
    body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "t"))
    body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "w"))
    

    Or, using browser.actions():

    browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('t').perform();
    browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('w').perform();
    

    Also, to open a new tab, there is an interesting hack (introduced here), which basically injects a new a element into the page and invokes click mouse event:

    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)
    };
    

    There is also window.close() function, but it would not close the tab if it was not opened via window.open() (reference). In other words, if this is a tab you manually open, then you can use window.open() -> window.close() approach with the help of browser.executeScript().

提交回复
热议问题