javascript - validacion - Comprobador de transportador si el elemento no existe
validar formulario javascript onclick (6)
Tengo una configuración en mi sitio web de base angular que activa y desactiva un menú desplegable. Si está apagado, no se muestra en la página principal.
Con Protractor, necesito verificar si este elemento no está presente cuando el interruptor está apagado. Sin embargo, no debería arrojarme al Error de elemento no encontrado, ya que es una prueba en un conjunto de muchas. ¿Cómo debería hacer esto?
He tratado de hacer:
expect($$(''.switch'').count()).to.equal(0).and.notify(next);
Pero estoy recibiendo un AssertionError con esto ...
Conseguí que la cosa funcionara usando algo que encontré en la documentación:
expect(element(by.css(''.switch'')).isPresent()).to.become(false).and.notify(next);
También usa aserciones, por lo que no rompe cucumberjs.
Estas respuestas no esperan que el elemento desaparezca. Para esperar a que desaparezca, debe utilizar las condiciones esperadas como se muestra a continuación. InvisibilityOf detecta si un elemento ha dejado el DOM. Véalo en los documentos aquí: https://www.protractortest.org/#/api?view=ProtractorExpectedConditions .
export const invisibilityOf = (el) =>
browser.wait(ExpectedConditions.invisibilityOf(el) as any, 12000,
''Element taking too long to disappear in the DOM'')
const el = element(by.css(arg1))
return invisibilityOf(el)
Lo tengo funcionando haciendo esto:
expect(element(by.css(''css'')).isPresent()).toBeFalsy();
Otra opción que funcionó un poco mejor para mí, y usa el "modo" de transportador para hacer las cosas http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.all
element.all(by.css(''.k-loading-image'')).then(function(items) {
expect(items.length).toBe(0);
});
(Quería comprobar que había desaparecido un indicador de carga)
ninguna de estas respuestas que incluyen count()
funcionó para mí;
el tipo de $$ (''. selector''). count () es
''object''
Tienes que usar la promesa para sacar el valor de count
esta manera.
const nameSelector = ''[data-automation="name-input"]'';
const nameInputIsDisplayed = () => {
return $$(nameSelector).count()
.then(count => count !== 0)
}
it(''should not be displayed'', () => {
nameInputIsDisplayed().then(isDisplayed => {
expect(isDisplayed).toBeFalsy()
})
})
stalenessOf
puede ser una buena manera de proceder: transportador - ExpectedConditions.stalenessOf
Por ejemplo, tienes un modal que está abierto actualmente. Lo cierras y esperas que no esté presente:
element(by.css(''.modal-dialog .cancel-button'')).click();
browser.wait(EC.stalenessOf(element(by.css(''.modal-dialog'')), 60000);
expect(element(by.css(''.modal-dialog'')).isPresent()).toBeFalsy();