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
toMatchpara hacer coincidir como una expresión regular ...Además, tenga en cuenta que
toContaincoincidirá con los elementos de la lista, si lo necesita.fuente
elementdevolver un objeto con unhasClassmétodo, que podría envolver dentro de unaexpectllamada ...toContainpodría ser una mejor opción quetoMatchen este caso./(^|\s)ngDirty($|\s)/..not.toContainpara verificar si no tiene la clase en particular o.toContainpara verificar si existeEl más simple es:
fuente
java.util.ArrayList cannot be cast to java.lang.Stringen 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
toHaveClasscomparador personalizado Jasmine 1.3.x con.notsoporte 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