2014-11-07 20 views
7

Nach dem Öffnen einer neuen Registerkarte (zweite) versuche ich auf die erste Registerkarte zu wechseln.Winkelmesser auf vorherigen Tab wechseln

 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

Ich habe das gleiche Problem, ich versuchte andere Ansatz als kapseln dies in einem Versprechen, verwendet browser.switchTo(). Window (tab1) .. kein Erfolg .. – Teodor

Antwort

8

Das Problem ist, dass Sie mit Strg + Tab zur vorherige Registerkarte zu gehen sind versucht, statt mit dem Fenster zurück zu wechseln abwickelt. Dies wird in WebDriver nicht unterstützt, da die Verwendung von Strg + Tab eine Systemoperation ist und nicht in Ihrem Browser für alle OS/Browser emuliert werden kann. Verwenden Sie einfach erneut browser.switchTo().

+0

Ist es möglich, eine Registerkarte über Winkelmesser zu schließen? – Aaron

4

@Aaron Dieser Code erhält alle verfügbaren Browser-Handles und löst das Versprechen. Dann auf die Registerkarte von einem <a href='newlink' target='_blank'>Link</a> erstellt wird geöffnet:

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://..."); 
     }); 
    }); 
}); 

In gleicher Weise können Sie zwischen den Registerkarten wechseln:

it("should open the first tab", function() { 
    browser.getAllWindowHandles().then(function (handles) { 
     browser.switchTo().window(handles[0]); 
    }); 
}); 

Und natürlich, schließen eine Registerkarte:

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

Hoffe das hilft!

Verwandte Themen