我已经使用Chai-as-Promised和Mocha进行了一个简单的coffeescript测试/ 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调用和后续重定向的结果,但我认为承诺的整个想法最终会等到某个超时时间来验证{ {1}}需要出现。
我需要明确添加吗?如果是这样,怎么样?
答案 0 :(得分:0)
我能够使用等待语法使其工作:
@driver.wait(-> driver.isElementPresent selenium.By.id("login-profile"), 10000)
感谢this post。
完整测试:
it 'submitting login', ->
driver = @driver
@driver.findElement(id: 'email').sendKeys('foo@bar.com')
@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/'