2016-06-02 30 views
0

ich einen regulären (nicht JS) Anker-Tag haben, die auf eine externe Seite verbindet, sondern mit zusätzlichen Verhalten auf Klick auszuführen, die das DOMTest-ng-Klick-Handler auf Ankertag

<body ng-controller="MyController"> 
    <a href="https://www.google.co.uk/" ng-click="inProgress = true"> 
    {{ inProgress ? "Going to Google" : "Go to Google" }} 
    </a> 
</body> 

I ändert möchte dieses Verhalten in einem E2E-Winkelmessertest testen. Es sieht jedoch so aus, als ob nach dem Klicken auf die Verknüpfung nachfolgende Befehle im Kontext der externen Seite ausgeführt werden. Zum Beispiel geht der folgende Test:

browser.element(by.css('a')).click(); 
expect(browser.getCurrentUrl()).toBe('https://www.google.co.uk/'); 

aber der folgende Test nicht

browser.element(by.css('a')).click(); 
expect(browser.element(by.css('body')).getText()).toBe('Going to Google'); 

mit dem Scheitern zeigt den Inhalt der Google-Homepage als Text von body.

Wie kann ich testen, was nach einem Klick auf ein nicht-Javascript a Tag passiert?

+3

Add _blank Ziel, wenn Sie Ihren Link wollen auf einem anderen Fenster zu öffnen, da sonst der Test korrekt ist zum Scheitern verurteilt, verschwinden Sie HTML, wenn Sie auf der @floribon Im Moment Link – floribon

+0

klicken, I Ich möchte nicht, dass der Link in einem neuen Fenster geöffnet wird, aber ich möchte testen, dass der Benutzer sieht, dass sich der Text in dem Link ändert, nachdem er darauf geklickt hat. –

+0

können Sie JQuery triggerHandler verwenden und dieses Szenario testen. 'browser.element ('a'). triggerHandler ('click')' –

Antwort

1

Ich nehme an, Sie müssen warten, bis sich der Text ändert, nachdem das Klicken passiert ist. Von Ihrem Code suchen Sie nach dem Text sofort nach dem Klick? Haben Sie versucht, Expected Conditions

var EC = protractor.ExpectedConditions; 
browser.wait(EC.textToBePresentInElement($('body'), 'Going to Google'), 5000); 
+0

Die erwarteten Bedingungen helfen nicht. Das Testen von * sofort * nach dem Klick zeigt an, dass die externe Seite geladen wurde. Wenn Sie also länger warten, wird die Uhr nicht zurückgestellt, und der Winkelmesser kann auf die vorherige Seite zugreifen. –

+0

Oh Entschuldigung, ich habe es falsch verstanden. Ich dachte, Sie testen den Körper Inhalt der folgenden Seite – nilesh

+0

Lesen Sie sich die Frage erneut, ich glaube, EC hat noch Potenzial, obwohl nicht ganz vielversprechend. Sie testen für den Fließtext _immediately_ aber vielleicht müssen Sie für einen Bruchteil einer Sekunde warten und dem Winkelmesser eine Chance geben? – nilesh

Verwandte Themen