Sto cercando di implementare il seguente scenario di test:pagina non angolare aperto dopo un clic
- eseguire un clic su un logo sulla pagina
- affermano c'è una nuova finestra del browser aperta (scheda in Chrome) e controllare l'URL corrente
il problema è che la pagina aperta in una nuova finestra del browser è una pagina non angolare mentre la pagina principale sto eseguendo il click in è un pagina angolare.
Ecco il mio primo tentativo:
it("should show logo", function() {
var logo = scope.page.logo;
expect(logo.isDisplayed()).toEqual(true);
// opens a new page on click
logo.click().then(function() {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[1]).then(function() {
expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
});
// switch back to the main window
browser.switchTo().window(handles[0]);
});
});
});
che non riesce con:
Error: Error while waiting for Protractor to sync with the page: "angular could not be found on the window"
che è comprensibile.
Il mio secondo tentativo è stato quello di giocare con ignoreSynchronization
flag booleano:
browser.ignoreSynchronization = true;
logo.click().then(function() {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[1]).then(function() {
expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
});
// switch back to the main window
browser.switchTo().window(handles[0]);
});
Ciò rende in realtà questo particolare passaggio di prova senza errori, ma colpisce ogni test eseguito dopo questo, perché browser
è un oggetto globale ed è condiviso tra i test - il goniometro non si sincronizza più con l'angolazione su una pagina che risulta in tutti i tipi di errori.
Come devo implementare il test?
Per aggirare il problema, posso cambiare il restartBrowserBetweenTests
setting per true
e cambiare ignoreSynchronization
valore senza alcun problema - ma rallenta i test in modo drammatico.
Sì, l'impostazione alla fine del blocco 'Il Liechtenstein attua lo rende a volte funziona, a volte no - il comportamento diventa incoerente. Proverò "beforeEach" e "afterEach" e tornerò da te. Grazie! – alecxe
Sì, impostando 'ignoreSynchronization' su' false' dentro 'afterEach()' ha fatto il trucco! – alecxe