Dans la documentation du rapporteur, je vois l'exemple suivant:
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
username.clear();
username.sendKeys('Jane Doe');
var name = element(by.binding('username'));
expect(name.getText()).toEqual('Jane Doe');
});
Ce qui semble clair ici, c'est que vous pouvez utiliser "by.model" pour définir des valeurs dans une zone de saisie, mais si vous voulez regarder une zone de saisie et voir ce qu'elle contient, vous devez utiliser "by.binding".
J'ai un ensemble de code où (en résumé) je fais:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(dans mon vrai code, j'enregistre l'entité puis j'y reviens en mode édition, et je vérifie que ma valeur a bien été enregistrée. Mais cela revient toujours à la même chose, et cet exemple de code pose le même problème).
Cela me donne une erreur:
Error: Expected '' to equal 'A value'.
En théorie, en suivant l'exemple de la documentation, je peux plutôt faire:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Mais by.binding ne semble pas aimer le modèle complet, j'obtiens une erreur:
Error: No element found using locator: by.binding("risk.name")
Cela fonctionne (en quelque sorte) si je fais:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Cela trouve un élément, mais donne également un avertissement que j'ai plus d'un élément qui correspond à «nom». Et malheureusement, celui qu'il choisit n'est pas le bon.
Donc, deux questions:
- Le by.model devrait-il être capable de retourner un getText (), ou y a-t-il une décision de conception selon laquelle il ne le fait pas et que nous devons utiliser à la place by.binding?
- Dois-je pouvoir utiliser une entité entièrement qualifiée dans by.binding, ou y a-t-il une décision de conception qui n'apprécie pas le nom complet du modèle par by.binding? Si tel est le cas, quel autre qualificatif puis-je utiliser pour choisir entre mes différentes liaisons?
ÉDITER:
J'ai également essayé la solution proposée par vdrulerz, j'ai modifié le code comme suit:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Le console.log renvoie une valeur vide (pas une promesse ou un objet), et l'attente échoue en donnant le message:
Expected '' to equal 'A risk name'.
Je crois comprendre que le rapporteur corrige déjà l'attente pour traiter la promesse, donc je pense que le problème sous-jacent est que getText ne fonctionne pas sur un champ identifié via un modèle (je peux réussir à obtenir le texte sur les étiquettes et autres widgets).
Je peux également exécuter le code suivant, en utilisant getAttribute plutôt que getText ():
expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true');
element(by.model('risk.name')).getAttribute('autofocus').then(function(text) {
console.log(text);
expect(text).toEqual('true');
});
La première partie passe - l'attente fonctionne. La deuxième partie fonctionne également, suggérant que la syntaxe de vdrulerz est également valide, et elle enregistre «true» sur la console. Je pense qu'il y a potentiellement un défaut avec getText?
la source
getText()
La fonction ne fonctionnera pas comme avant pour le pilote Web, afin de le faire fonctionner pour le rapporteur, vous devrez l'envelopper dans une fonction et renvoyer le texte comme nous l'avons fait pour notre cadre de rapporteur, nous l'avons conservé dans un fonction commune comme -Par cela, vous pouvez avoir le texte d'un élément.
Faites-moi savoir si ce n'est toujours pas clair.
la source
J'ai eu ce problème, j'ai essayé la solution de Jmr mais cela n'a pas fonctionné pour moi. Comme tous les champs d'entrée ont des attributs ng-model, je pourrais extraire l'attribut et l'évaluer et obtenir la valeur.
HTML
Rapporteur
la source
Ce code fonctionne. J'ai un champ de saisie de date qui a été mis en lecture seule, ce qui oblige l'utilisateur à sélectionner dans le calendrier.
pour une date de début:
pour une date de fin:
la source
le code ci-dessous fonctionne pour moi, pour obtenir du texte à partir de l'entrée
la source
Vous devez utiliser Promise pour imprimer ou stocker les valeurs de l'élément.
la source
Vous pouvez essayer quelque chose comme ça
Ensuite, vous pouvez appeler cette fonction là où vous souhaitez obtenir la valeur.
la source
Vous pouvez utiliser jQuery pour obtenir du texte dans la zone de texte (fonctionne bien pour moi), vérifier les détails de l'image
Code:
Injectez cette requête ci-dessus dans votre code. Détail de l'image:
la source