2016-08-08 2 views
0

아래의 mocha 및 webdriverio 스크립트는 페이지가로드되기 전에 어설 션을 전달합니다.페이지가로드되기 전에 모카 어설 션이 전달되었습니다.

아마도 요소 자체가 아직 존재하지 않을 때 모든 것을 어떻게 전달하는지 이해하지 못합니다. 페이지가로드 된 후 해당 요소가 클릭되지 않은 것을 볼 수 있습니다. 가짜 패스인가요? 코드에서 어떻게 수정합니까? 브라우저가 페이지를로드 할 수있는 기회가 있었다 전에

var webdriverio = require('webdriverio'); 
var should = require('chai').should() 
var expect = require('chai').expect() 
var options = { 
    desiredCapabilities: { 
     browserName: 'chrome' 
    } 
}; 

before(function() { 

    browser=webdriverio.remote(options) 
    return browser.init() 

    }); 


describe('sauce labs page test', function() { 
    it('should assert page title', function(done) { 




      browser.url('https://docs.saucelabs.com/reference/platforms-configurator/?_ga=1.5883444.608313.1428365147#/'); 
      browser.getTitle().then(function(title){ 
      title.should.equal('Platform Configurator'); 
      }); 
      done(); 
    }); 



    it('should assert sub heading', function(done) { 

    browser.getText('h3').then(function(text) { 
    text.should.equal('API'); 
    console.log(text); 
    }); 
    done(); 
}); 


    it('should click on selenium', function(done) { 

    browser.click('#main-content > div > ng-view > div > div:nth-child(1) > div.choice-buttons.choice-api > div:nth-child(2)') 


    done(); 
}); 


}); 

답변

2

당신은 그렇지 않으면이 호출은 .then() 핸들러 내부에 done 콜백을 호출해야합니다 : 그러나

it('should assert page title', function(done) { 
    browser.url('https://docs.saucelabs.com/reference/platforms-configurator/?_ga=1.5883444.608313.1428365147#/'); 
    browser.getTitle().then(function(title) { 
    title.should.equal('Platform Configurator'); 
    done(); 
    }); 
}); 

을, 이것은 또 다른 문제를 소개합니다 : 주장하는 경우 실패하면 done이 호출되지 않습니다 (앞에 예외가 발생하기 때문에).

대신 Mocha에 기본 제공 약속이 있다는 사실을 사용할 수 있습니다. 대신 done 콜백을 사용하는, 약속을 반환하고 모카는 제대로 (그리고 예외를) 처리 할 :

it('should assert page title', function() { 
    browser.url('https://docs.saucelabs.com/reference/platforms-configurator/?_ga=1.5883444.608313.1428365147#/'); 
    return browser.getTitle().then(function(title) { 
    title.should.equal('Platform Configurator'); 
    }); 
}); 
+0

당신을 감사합니다. 그게 효과가있다. 나는 약속을 사용 하겠지만, 어떻게 이해해야하는지'do()'는'browser.getTitle()'이 호출 될 때까지 기다려야하고, 결국'title.should.equal() 'Platform Configurator')를 호출하여 모든 것이 정렬됩니다. 숨겨진 부분이 너무 많아서 이해하기가 어렵습니다. – user1207289

+1

테스트중인 코드는 비동기식이므로 비동기식 코드를 사용하는 경우 계속하기 전에 비동기식 작업이 완료 될 때까지 기다려야합니다 ('done' 호출). 테스트가 끝난 모카에게 신호). 약속과 함께 비동기 액션은'then/onFullfilled' 콜백이 호출 될 때 완료됩니다 (또는 콜백이 있다면 catch/onRejected 콜백). – robertklep

관련 문제