En la documentación del transportador, veo el siguiente ejemplo:
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');
});
Lo que parece claro aquí es que puede usar "by.model" para establecer valores en un cuadro de entrada, pero si desea ver un cuadro de entrada y ver qué hay en él, debe usar "by.binding".
Tengo un conjunto de código donde (en resumen) hago:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(en mi código real guardo la entidad y luego vuelvo a ella en modo de edición, y estoy verificando que mi valor se haya guardado realmente. Pero aún se reduce a lo mismo, y este código de muestra da el mismo problema).
Esto me da un error:
Error: Expected '' to equal 'A value'.
En teoría, siguiendo el ejemplo de los documentos, puedo hacer en su lugar:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Pero al by.binding no parece gustarle el modelo totalmente calificado, aparece un error:
Error: No element found using locator: by.binding("risk.name")
Funciona (de alguna manera) si lo hago:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Esto encuentra un elemento, pero también advierte que tengo más de un elemento que coincide con 'nombre'. Y, lamentablemente, el que elige no es el correcto.
Entonces, dos preguntas:
- ¿Debería by.model poder devolver un getText (), o hay una decisión de diseño de que no lo haga y que necesitemos usar by.binding en su lugar?
- ¿Debo poder usar una entidad totalmente calificada en by.binding, o hay una decisión de diseño que a by.binding no le gusta el nombre completo del modelo? Si es así, ¿qué otro calificador puedo usar para seleccionar entre mis diferentes enlaces?
EDITAR:
También probé la solución sugerida por vdrulerz, modifiqué el código de la siguiente manera:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Console.log está devolviendo un valor en blanco (no una promesa o un objeto), y la expectativa falla dando el mensaje:
Expected '' to equal 'A risk name'.
Tengo entendido que el transportador ya parchea la expectativa de lidiar con la promesa, por lo que creo que el problema subyacente es que getText no funciona en un campo identificado a través de un modelo (puedo getText con éxito en etiquetas y otros widgets).
También puedo ejecutar el siguiente código, usando getAttribute en lugar 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');
});
La primera parte pasa, lo esperado funciona. La segunda parte también funciona, lo que sugiere que la sintaxis de vdrulerz también es válida, y registra "verdadero" en la consola. Creo que existe un defecto potencial con getText.
fuente
getText()
la función no funcionará como solía ser para webdriver, para que funcione para transportador, necesitará envolverlo en una función y devolver el texto algo como lo hicimos para nuestro marco de transportador lo hemos mantenido en un función común como -Con esto puede tener el texto de un elemento.
Avísame si aún no está claro.
fuente
Tuve este problema, probé la solución de Jmr, sin embargo, no funcionó para mí. Como todos los campos de entrada tienen atributos de modelo ng, podría extraer el atributo y evaluarlo y obtener el valor.
HTML
Transportador
fuente
Este código funciona. Tengo un campo de entrada de fecha que se ha configurado para leer solo, lo que obliga al usuario a seleccionar del calendario.
para una fecha de inicio:
para una fecha de finalización:
fuente
el siguiente código funciona para mí, para obtener texto de la entrada
fuente
Tienes que usar Promise para imprimir o almacenar valores de elemento.
fuente
Puedes probar algo como esto
Entonces puede llamar a esta función donde desee obtener el valor.
fuente
Puede usar jQuery para obtener texto en el cuadro de texto (funciona bien para mí), verifique los detalles de la imagen
Código:
Inyecte esta consulta anterior a su código. Detalle de la imagen:
fuente