Rapporteur: Obtenir le texte de l'alerte?
Je teste mon Angulaire app avec le Rapporteur. J'ai regardé à travers les docs et ne peut pas trouver un moyen d'obtenir le texte de l'alerte. Il n'est pas un élément dans le DOM en soi (au moins, pas ce que je peux comprendre; quand il y a une alerte jusqu', google Chrome, inspecteur ne vous permettra pas de le consulter). Comment pourrais-je tester qu'une alerte a le bon message? Ou encore, que l'on est présent?
Modifier
Voici mon code. HTML:
<button id='alertButton' data-ng-click='ngAlert()'>Button</button>
JS:
$scope.ngAlert = function(){
window.alert('Hello');
};
Rapporteur spec:
describe('alert', function(){
var ptor = protractor.getInstance();
beforeEach(function(){
button = $('#alertButton');
button.click();
});
it('tells the alert message', function(){
expect(button.getText()).toEqual('Button');
});
});
Quand je fais une assertion sur le bouton texte comme ceci:
it('tells the alert message', function(){
expect(button.getText()).toEqual('Button');
});
Il passe. Mais si j'essaie de lire une alerte comme ceci:
it('tells the alert message', function(){
var alertDialog = ptor.switchTo().alert();
expect(alertDialog.getText()).toEqual('Hello');
});
J'obtiens cette erreur:
$ rapporteur spec/e2e/conf.js en Utilisant le sélénium serveur
http://localhost:4444/wd/hub .FÉchecs:
1) alerte indique le message d'alerte Message:
NoSuchAlertError: pas d'alerte ouvert (Séance d'info: chrome=30.0.1599.101) (Pilote info: chromedriver=2.2,=plate-forme Mac OS
X 10.9.0 x86_64) (ATTENTION: Le serveur ne fournit pas toutes les stacktrace
de l'information) de Commande de la durée ou délai d'attente: 3 millisecondes Construire info:
version: '2.35.0', de révision: 'c916b9d', temps: "2013-08-12 15:42:01'
Infos système: os.nom: 'Mac OS X', os.arc: 'x86_64', os.version:
'10.9', java.version: '1.6.0_65' ID de Session:
edbaa752eb14ad45f7e961903b69a466 Pilote d'info:
org.openqa.le sélénium.le chrome.ChromeDriver Capacités [{=plate-forme MAC,
acceptSslCerts=true, javascriptEnabled=true, browserName=chrome,
chrome={chromedriverVersion=2.2}, orientable=false,
locationContextEnabled=vrai, version=30.0.1599.101,
cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true,
browserConnectionEnabled=false, nativeEvents=true,
webStorageEnabled=true, applicationCacheEnabled=false,
takesScreenshot=true}]Fini en 2.125 secondes 2 essais, 2 affirmations, 1 échec
/usr/local/lib/node_modules/rapporteur/node_modules/sélénium webdriver/lib/webdriver/promesse.js:1542
jeter de l'erreur;
^ NoSuchAlertError: pas d'alerte ouvert
Mais je l'ai testé sur la page et il fonctionne, et le test peut clairement trouver la touche dans les DOM. Donc, soit le click()
fonction n'est pas de travail, ou quelque chose d'autre se passe?
Vous devez vous connecter pour publier un commentaire.
À l'intérieur de votre test, obtenir l'actuel Rapporteur de l'instance et de l'utilisation
switchTo().alert()
pour accéder à laalert
boîte de dialogue:Gardez à l'esprit que le Rapporteur est fondamentalement juste un wrapper pour Selenium WebDriver donc, autant que je sache, tout ce que vous pouvez faire avec Selenium WebDriver que vous pouvez faire avec le Rapporteur.
Modifié pour inclure le test complet:
Il est possible que votre application est en cours d'initialisation au point que votre test est exécuté, ce qui expliquerait pourquoi, aucun dialogue ne semble apparaître. S'assurer que votre application est "prêt à aller" et peut effectivement afficher l'alerte avant de faire votre affirmation. Espérons que ça aide!
unexpected alert open
dans ce scénario, depuis lebeforeEach
devrait avoir déclenché la boîte de dialogue. Est-ce votre code de test, ou d'un cas simplifié? J'ai élargi ma réponse à inclure le test complet, qui fonctionne correctement pour moi. Une différence à noter est la façon dont je suis la recherche de l'élément de bouton, c'est à dire le "Bon chemin".$
! Je ne savais pas que c'était le cas. Voici le prototype de code j'ai utilisé en conjonction avec le test dans ma réponse. Comment êtes-vous initialisation de votre application?<html ng-app>
ou d'une autre façon? Est-il en aucune façon possible votre application n'a pas terminé l'initialisation du point de l'exécution de vos tests?by.buttonText('My text')
dans le sélecteur, puisque le test a échoué car il ne trouve pas le bouton par ID. Par la suite, le test a été en mesure d'exécuter.Vous avez à attendre pour le navigateur pour ouvrir l'alerte. Exemple d'utilisation de Rapporteur 2.2.0: