test node framework selenium-webdriver coffeescript mocha chai-as-promised

selenium webdriver - node - Selenium-Webdriver w/Chai as Promised y Mocha no pueden esperar



chai expect (1)

Tengo una prueba simple de coffeescript con Selenium-Webdriver utilizando Chai-as-Promised y Mocha, que se supone que prueba una página web que tengo que usa una llamada AJAX para hacer la autenticación una vez que se presiona un botón de inicio de sesión:

selenium = require ''selenium-webdriver'' chai = require ''chai'' chai.use require ''chai-as-promised'' expect = chai.expect before -> @timeout 10000 @driver = new selenium.Builder() .withCapabilities(selenium.Capabilities.chrome()) .build() @driver.getWindowHandle() after -> @driver.quit() describe ''Test Login'', -> beforeEach -> @driver.get ''http://DOMAIN/login/'' it ''submitting login'', -> @driver.findElement(id: ''email'').sendKeys(''[email protected]'') @driver.findElement(id: ''password'').sendKeys(''foo'') @driver.findElement(css: ''#login-btn'').submit() expect(@driver.findElement(id: ''#login-profile'')).to.eventually.be.true expect(@driver.getCurrentUrl()).to.eventually.equal ''http://DOMAIN/profile/''

La forma en que funciona la página de inicio de sesión es que una vez que hace clic en iniciar sesión se realiza una llamada AJAX, y si el inicio de sesión es exitoso, la página se redirige a través de document.location.href a / profile /.

Sin embargo, cuando se ejecuta este script, el navegador se abre y va a la página de inicio de sesión, se completa correctamente, pero en cuanto se hace clic falla.

Creo que lo que está sucediendo es que el navegador no está esperando el resultado de la llamada AJAX y el redireccionamiento posterior, pero creo que la idea de promesas sería que eventualmente esperarían hasta algún período de tiempo de espera para verificar que #login-profile necesitaría mostrar arriba.

¿Debo agregar eso explícitamente? ¿Si es así, cómo?


Pude hacer que esto funcionara usando la sintaxis de espera:

@driver.wait(-> driver.isElementPresent selenium.By.id("login-profile"), 10000)

gracias a esta publicación

La prueba completa:

it ''submitting login'', -> driver = @driver @driver.findElement(id: ''email'').sendKeys(''[email protected]'') @driver.findElement(id: ''password'').sendKeys(''foo'') @driver.findElement(css: ''#login-btn'').submit() @driver.wait(-> driver.isElementPresent selenium.By.id("login-profile"), 10000) expect(@driver.getCurrentUrl()).to.eventually.equal ''http://DOMAIN/profile/''