selenium webdriver - सेलेनियम-वेबड्राइवर w/चाई के रूप में वादा किया गया और मोचा इंतजार करने में विफल रहे



selenium-webdriver coffeescript (1)

मुझे चाइ-ऐज-वाइज्ड और मोचा का उपयोग करते हुए एक साधारण कॉफ़ेप्स्क्रिप्ट टेस्ट w / सेलेनियम-वेबड्रिवर मिला है, जो एक वेब पेज का परीक्षण करने वाला है जो कि एक लॉगिन बटन दबाए जाने के बाद प्रमाणीकरण करने के लिए एक 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('[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/'

जिस तरह से लॉग इन पृष्ठ काम करता है वह है कि एक बार जब आप एक एजेएसीएक्स कॉल में लॉगिन करते हैं, तो लॉगिन बन जाता है और यदि पेज को document.location.href जरिए रीडायरेक्ट किया जाता है।

हालांकि, जब यह स्क्रिप्ट ब्राउज़र चलाता है और लॉगिन पृष्ठ पर जाता है, यह सही तरीके से भरा हुआ है, लेकिन जैसे ही इसे क्लिक किया जाता है, इसे विफल हो जाता है

मुझे लगता है कि ऐसा हो रहा है कि ब्राउज़र AJAX कॉल के परिणाम के लिए इंतजार नहीं कर रहा है और बाद में रीडायरेक्ट करता है, लेकिन मुझे पूरा विश्वास है कि वादा पूरा हो जाएगा कि अंततः कुछ समय समाप्त होने तक इंतजार करना होगा कि #login-profile को दिखाने की आवश्यकता होगी अप।

मुझे स्पष्ट रूप से जोड़ने की आवश्यकता है? यदि हां, तो कैसे?


मैं प्रतीक्षा वाक्यविन्यास का उपयोग करने के लिए इसे प्राप्त करने में सक्षम था:

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

इस पोस्ट के लिए धन्यवाद

पूर्ण परीक्षण:

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/'




chai-as-promised