Como getText em uma input no transferidor

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 checkbox de input, mas se você quiser olhar para uma checkbox de input e ver o que está 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'); 

(no meu código real, eu salvo a entidade, em seguida, volto a ela no modo de edição, e estou verificando se meu valor foi realmente salvo. Mas ainda se resume à mesma coisa, e esse código de exemplo fornece 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 completo, eu recebo um erro:

 Error: No element found using locator: by.binding("risk.name") 

Funciona (depois de uma moda) se eu fizer:

 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 ‘name’. E infelizmente o que escolhe não é o certo.

Então, duas perguntas:

  1. O by.model deve ser capaz de retornar um getText (), ou existe uma decisão de design que não faça isso e precisamos usar by.binding?
  2. Devo ser capaz de usar uma entidade totalmente qualificada no by.binding, ou existe uma decisão de design que by.binding não goste do nome completo do modelo? Em caso afirmativo, qual outro qualificador posso usar para selecionar minhas diferentes ligações?

EDITAR:

Eu também tentei a solução sugerida por vdrulerz, eu modifiquei o código da seguinte forma:

 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 promise ou um object), e o esperado falha ao fornecer a mensagem:

 Expected '' to equal 'A risk name'. 

Meu entendimento é que o transferidor já corrige a expectativa de lidar com a promise, portanto, sinto que o problema subjacente é que o getText não está trabalhando em um campo identificado por meio de um modelo (posso getText com êxito em labels e outros widgets).

Eu também posso executar o código a seguir, 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 syntax do vdrulerz ‘também é válida e registra’ true ‘no console. Eu acho que há potencialmente um defeito com getText?

Isso é respondido na FAQ do Protractor: https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always- vazio

O resultado de getText de um elemento de input está sempre vazio

Essa é uma peculiaridade do webdriver. e os elementos sempre possuem valores getText vazios. Em vez disso, tente:

 element.getAttribute('value') 

Quanto à pergunta 2, sim, você deve poder usar um nome totalmente qualificado para by.binding. Eu suspeito que o seu template não tenha realmente um elemento que esteja ligado ao risk.name via {{}} ou ng-bind.

getText() function getText() não funcionará como costumava ser para o webdriver, para que funcione para o transferidor, você precisará envolvê-lo em uma function e retornar o texto como fizemos para a estrutura do nosso transferidor que mantemos em uma function comum como –

 getText : function(element, callback) { element.getText().then (function(text){ callback(text); }); }, 

Por isso você pode ter o texto de um elemento.

Deixe-me saber se ainda não está claro.

Eu tive esse problema eu tentei a solução da JMR no entanto, não funcionou para mim. Como todos os campos de input possuem atributos ng-model, eu poderia puxar o atributo e avaliá-lo e obter o valor.

HTML

  

Transferidor

 var qty = element( by.model('qty') ); qty.sendKeys('10'); qty.evaluate(qty.getAttribute('ng-model')) //-> 10 

Este código funciona. Eu tenho um campo de input de data que foi definido para ler apenas o que força o usuário a selecionar no calendar.

para uma data de início:

 var updateInput = "var input = document.getElementById('startDateInput');" + "input.value = '18-Jan-2016';" + "angular.element(input).scope().$apply(function(s) { s.$parent..searchForm[input.name].$setViewValue(input.value);})"; browser.executeScript(updateInput); 

para uma data final:

 var updateInput = "var input = document.getElementById('endDateInput');" + "input.value = '22-Jan-2016';" + "angular.element(input).scope().$apply(function(s) { s.$parent.searchForm[input.name].$setViewValue(input.value);})"; browser.executeScript(updateInput); 

abaixo código funciona para mim, para obter texto de input

 return(this.webelement.getAttribute('value').then(function(text) { console.log("--------" + text); })) 

Você pode tentar algo parecido com isto

 var access_token = driver.findElement(webdriver.By.name("AccToken")) var access_token_getTextFunction = function() { access_token.getText().then(function(value) { console.log(value); return value; }); } 

Do que você pode chamar essa function onde você deseja obter o valor ..

Você precisa usar o Promise para imprimir ou armazenar valores do elemento.

  var ExpectedValue:string ="AllTestings.com"; element(by.id("xyz")).getAttribute("value").then(function (Text) { expect(Text.trim()).toEqual("ExpectedValue", "Wrong page navigated");//Assertion console.log("Text");//Print here in Console }); 

Você pode usar o jQuery para obter texto na checkbox de texto (funcione bem para mim), verifique o detalhe da imagem

Código:

 $(document.evaluate( "xpath" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val() Example: $(document.evaluate( "//*[@id='mail']" ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue).val() 

Injete esta consulta acima para o seu código. Detalhe da imagem:

insira a descrição da imagem aqui