Na documentação do transferidor, vejo o seguinte exemplo:
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');
});
O que parece claro aqui é que você pode usar "by.model" para definir valores em uma caixa de entrada, mas se quiser olhar para uma caixa de entrada e ver o que há nela, você precisa usar "by.binding".
Eu tenho um conjunto de códigos onde (em resumo) eu faço:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(em meu código real, salvo a entidade e depois volto a ela no modo de edição e estou verificando se meu valor foi realmente salvo. Mas ainda assim se resume à mesma coisa, e este código de amostra apresenta o mesmo problema).
Isso me dá um erro:
Error: Expected '' to equal 'A value'.
Em teoria, seguindo o exemplo dos documentos, posso fazer:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Mas o by.binding não parece gostar do modelo totalmente qualificado, recebo um erro:
Error: No element found using locator: by.binding("risk.name")
Funciona (depois de uma moda) se eu:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Isso encontra um elemento, mas também avisa que tenho mais de um elemento que corresponde a 'nome'. E, infelizmente, aquele que ele escolhe não é o certo.
Então, duas perguntas:
- O by.model deve ser capaz de retornar getText () ou há uma decisão de design de que ele não faça isso e precisamos usar by.binding em vez disso?
- Devo ser capaz de usar uma entidade totalmente qualificada no by.binding ou há uma decisão de design que o by.binding não gosta do nome completo do modelo? Em caso afirmativo, que outro qualificador posso usar para selecionar entre minhas diferentes ligações?
EDITAR:
Também tentei a solução sugerida por vdrulerz, modifiquei o código da seguinte maneira:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
O console.log está retornando um valor em branco (não uma promessa ou um objeto), e o expect falha ao fornecer a mensagem:
Expected '' to equal 'A risk name'.
Meu entendimento é que o transferidor já corrige a expectativa para lidar com a promessa, então sinto que o problema subjacente é o getText não funcionar em um campo identificado por meio de um modelo (posso obter o texto em rótulos e outros widgets).
Também posso executar o seguinte código, usando getAttribute em vez de 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');
});
A primeira parte passa - a expectativa funciona. A segunda parte também funciona, sugerindo que a sintaxe de vdrulerz também é válida e registra 'true' no console. Eu acho que há um defeito potencial com getText?
fonte
getText()
função não funcionará como costumava ser para o webdriver, a fim de fazê-la funcionar para o transferidor, você precisará envolvê-la em uma função e retornar o texto, como fizemos para nossa estrutura de transferidor que o mantemos em um função comum como -Com isso, você pode ter o texto de um elemento.
Avise-me se ainda não estiver claro.
fonte
Eu tive esse problema, tentei a solução de Jmr, mas não funcionou para mim. Como todos os campos de entrada têm atributos de modelo ng, eu poderia puxar o atributo e avaliá-lo e obter o valor.
HTML
Transferidor
fonte
Este código funciona. Eu tenho um campo de entrada de data que foi definido para somente leitura, o que força o usuário a selecionar no calendário.
para uma data de início:
para uma data de término:
fonte
o código abaixo funciona para mim, para obter texto de entrada
fonte
Você tem que usar Promise para imprimir ou armazenar valores de elemento.
fonte
Você pode tentar algo assim
Então, você pode chamar esta função de onde deseja obter o valor ..
fonte
Você pode usar jQuery para obter texto na caixa de texto (funciona bem para mim), verifique os detalhes da imagem
Código:
Injete a consulta acima em seu código. Detalhe da imagem:
fonte