2016-06-24 5 views
1

TDD 방법론을 사용하여 웹 프로그램을 개발했습니다. 따라서 테스트는 Selenium WebDriver 라이브러리를 사용하고 있습니다. 하지만 내 프로그램이 제대로 작동하지 않는 것 같습니다. 다음은 소스 코드입니다.모카 및 셀레늄 어설 션 중에 웹 드라이브 오류가 발생했습니다

공공/index.html을 :

<h1 class="hello">Hello, world!</h1> 

시험/test.js :

'use strict' 
var assert = require('assert') 
var webdriver = require('selenium-webdriver'), 
    By = webdriver.By, 
    until = webdriver.until 

var driver; 

before(() => { 
    driver = new webdriver.Builder() 
     .forBrowser('chrome') 
     .build() 
}) 

describe('Index page',() => { 
    before(() => { 
     driver.get('http://localhost:8080/') 
    }) 

    it('should show hello greetings',() => { 
     let hello = driver.findElement(By.css('h1.hello')) 
     assert.equal(hello.getText(), 'Hello, world!') 
    }) 
}) 

package.json :

{ 
    "name": "foobar", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "devDependencies": { 
    "mocha": "^2.5.3" 
    "selenium-webdriver": "^2.53.2" 
    }, 
    "scripts": { 
    "start": "http-server public", 
    "test": "mocha" 
    }, 
    "author": "", 
    "license": "ISC" 
} 

그리고 난 다음 명령을 실행했습니다. 내가 npm test 명령을 사용하여 모든 테스트를 실행할 때 npm start 명령을 실행하거나되지 않은에

C:\Projects\foobar>npm install 

그래서, 그것은 관계없이 항상 실패했습니다.

C:\Projects\foobar>npm test 

> [email protected] test C:\Projects\foobar 
> mocha 



    Index page 
    1) should show hello greetings 


    0 passing (62ms) 
    1 failing 

    1) Index page should show hello greetings: 
    AssertionError: ManagedPromise { 
    flow_: 
    ControlFlow { 
    propagateUnhandledRejections_: true, 
    activeQueue_: 
     TaskQueue { 
    == 'Hello, world!' 
     at Context.<anonymous> (C:\Projects\foobar\test\test.js:22:16) 
     at callFn (C:\Projects\foobar\node_modules\mocha\lib\runnable.js:326:21) 
     at Test.Runnable.run (C:\Projects\foobar\node_modules\mocha\lib\runnable.js:319:7) 
     at Runner.runTest (C:\Projects\foobar\node_modules\mocha\lib\runner.js:422:10) 
     at C:\Projects\foobar\node_modules\mocha\lib\runner.js:528:12 
     at next (C:\Projects\foobar\node_modules\mocha\lib\runner.js:342:14) 
     at C:\Projects\foobar\node_modules\mocha\lib\runner.js:352:7 
     at next (C:\Projects\foobar\node_modules\mocha\lib\runner.js:284:14) 
     at Immediate._onImmediate(C:\Projects\foobar\node_modules\mocha\lib\runner.js:320:5) 


npm ERR! Test failed. See above for more details. 

제가 생각하기에 주된 이슈는 hello.getText()입니다. getText() 메서드는 hello 요소의 텍스트를 가져올 수 없습니다.

+0

'h1.hello'는 유효한 검색어가 아닙니다. – cviejo

+0

'findElement (By.css ('h1.hello'))'. 'html'에서'h1'은'hello' 값을 가진'class' 속성을 가지고 있지 않습니다. 그것은 요소를 찾을 수 있기 때문에 당신은 이것을'html' 샘플에 넣는 것을 잊었다 고 가정하고 있습니까? – RemcoW

+0

@cviejo @RemcoW 고맙습니다. 그러나,'

Hello, world!로 수정하면!

', 차이는 없습니다. – signal

답변

0

대부분의 드라이버 작업은 비동기 적이며 해당 작업의 실제 반환 값이 아니라 약속을 반환합니다. 귀하의 경우에는 findElement을 변경해야하며 getText을 해당 방식으로 변경해야합니다. 또한 기본값은 2000ms로 설정되고 대부분의 페이지는 그때까지로드가 완료되지 않으므로 시간 초과를 설정해야합니다. 이 시도 : 화살표 기능은 자신의 this 객체를 정의하지 않는 것이

'use strict' 
var assert = require('assert'); 
var webdriver = require('selenium-webdriver'); 

var By = webdriver.By; 
var until = webdriver.until; 

var driver; 

before(function() { 
    driver = new webdriver.Builder() 
     .forBrowser('chrome') 
     .build(); 
}); 

describe('Index page', function() { 

    this.timeout(5000); 

    before(function() { 
     driver.get('http://localhost:8080/'); 
    }); 

    it('should show hello greetings', function (done) { 
     driver.findElement(By.css('h1.hello')) 
      .then(elem => elem.getText()) 
      .then(text => assert.equal(text, 'Hello, world!')) 
      .then(done); 
    }); 
}); 

참고. this.timeout에 액세스하려면 일반 콜백 함수를 사용해야합니다. 어떤 경우 든 모카에서의 사용은 권장하지 않습니다. following :

Mocha에 화살표 기능을 전달하는 것은 권장되지 않습니다. 이 값의 어휘 적 바인딩으로 인해 모카 문맥에 액세스 할 수 없으며 this.timeout (1000); 화살표 기능 안에서는 작동하지 않습니다.

+0

오케이. 내가 참조. 그러나 서버를 시작하지 않고 테스트를 실행하면 오류가 없습니다. 왜? – signal

+0

내 대답에 오타가 있었는데 포트 '3001'은 (는) '8080'이어야합니다. 결정된. 테스트가 통과되면 서버를 다시 확인하십시오. – cviejo

+0

확인했습니다. 하지만 포트가 8080인지 여부에 관계없이 항상 통과합니다. – signal

관련 문제