我有一个使用 Chai-as-Promised 和 Mocha 的简单的带有 Selenium-Webdriver 的咖啡脚本测试,它应该测试我拥有的使用 AJAX 调用在按下登录按钮后进行身份验证的网页:
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('foo@bar.com')
@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/'
登录页面的工作方式是,一旦您单击登录,就会进行 AJAX 调用,如果登录成功,页面将通过重定向document.location.href
到 /profile/。
但是,当此脚本运行时,浏览器会打开并转到登录页面,它已正确填写,但一旦单击它就会失败。
我认为正在发生的事情是浏览器没有等待 AJAX 调用和后续重定向的结果,但我认为承诺的整个想法是最终会等到某个超时时间来验证#login-profile
是否需要显示。
我需要明确添加吗?如果是这样,怎么做?