Estoy probando Protractor para probar la aplicación Angular e2e y no he descubierto cómo detectar si un elemento tiene una clase específica o no.
En mi caso, la prueba hace clic en el botón enviar y ahora quiero saber si el formulario [name = "getoffer"] tiene clase .ngDirty. ¿Cuáles pueden ser las soluciones?
describe('Contact form', function() {
beforeEach(function(){
browser.get('http://localhost:9000');
element(by.linkText('Contact me')).click();
});
it('should fail form validation, all fields pristine', function() {
element(by.css('.form[name="getoffer"] input[type="submit"]')).click();
expect(element(by.name('getoffer'))).toHaveClass('ngDirty'); // <-- This line
});
});
fuente
expect(hasClass(element(by.name('getoffer')), 'ng-dirty')).toBe(true);
Si está usando Transportador con Jasmine, podría usar
toMatch
para hacer coincidir como una expresión regular ...Además, tenga en cuenta que
toContain
coincidirá con los elementos de la lista, si lo necesita.fuente
element
devolver un objeto con unhasClass
método, que podría envolver dentro de unaexpect
llamada ...toContain
podría ser una mejor opción quetoMatch
en este caso./(^|\s)ngDirty($|\s)/
..not.toContain
para verificar si no tiene la clase en particular o.toContain
para verificar si existeEl más simple es:
fuente
java.util.ArrayList cannot be cast to java.lang.String
en Microsoft EdgeSegún la respuesta de Sergey K, también puede agregar un comparador personalizado para hacer esto:
(coffeescript)
Entonces puedes usarlo en pruebas como esta:
Y obtendrá el siguiente error si no es así:
fuente
Has probado...
o una variación de lo anterior ...
fuente
Hice este emparejador, tuve que envolverlo en una promesa y usar 2 devoluciones
en mi prueba ahora puedo hacer cosas como esta:
esto también funciona cuando un elemento tiene varias clases o cuando un elemento no tiene ningún atributo de clase.
fuente
Aquí, un
toHaveClass
comparador personalizado Jasmine 1.3.x con.not
soporte de negación más espera hasta 5 segundos (o lo que especifique).Encuentre el emparejador personalizado completo que se agregará en su bloque onPrepare en esta esencia
Uso de muestra:
fuente
Así es como lo hago al menos, sin la necesidad de usar la función de espera. Esta función simplemente devuelve verdadero si la clase está dentro del elemento y falso si no. Esto también usa promesas, por lo que lo usaría como:
Editar: me acabo de dar cuenta de que esto es esencialmente lo mismo que la respuesta principal
fuente
Una forma de lograr esto sería usar xpath y usar
contains()
Ejemplo:
fuente
Puede usar el analizador CSS para manejar esto verificando si existe un elemento con la clase dada:
fuente