2017-11-07 24 views
1

http://webdriver.io/guide/getstarted/modes.html독립 실행 형 모드에서 webdriverio를 동 기적으로 실행하는 방법은 무엇입니까?

저는 Chromedriver를 사용하여 webdriverio 테스트를 디버깅하려고 시도하고 있습니다. webdriverio 명령이 비동기이며 브라우저 세션이 테스트와 동기화되지 않아 코드를 단계별로 실행할 수 없습니다.

문서를 읽으므로 실망 스럽습니다. 테스트를 생성하려면 Chai 또는 wdio와 같은 테스트 프레임 워크가 필요하지만 이것은 절차 적 동기 명령을 갖는 많은 작업처럼 보입니다.

webdriverio를 사용하여 일부 웹 사이트를 크롤링하면되지만이 비동기 명령은 Chrome devtools를 사용하여 디버그하기가 너무 어렵습니다.

webdriverio를 동 기적으로 작동시키는 방법이 있습니까? loadedPage 제외

예)

var loadedPage = webdriverio.remote(options).init().url('https://google.com');

가 준비되지 않았습니다 옆 라인에 시간 디버그 이동에 의해 정의되어 있지 않습니다.

답변

1

음, WebdriverIO은 자동화 프레임 워크의 보석이며 포괄적 인 documentation은 강력한 솔루션 중 하나입니다. 정확하게 지적했듯이 은 모두 비동기식입니다 (). 그러나 WDIO를 사용하면 기존의 순차 프로그래밍 백그라운드에서 온다면 완전 동기화 옵션을 사용할 수 있습니다. 합니다 (WDIO test-runner를 사용하지 않고)

  • 비동기 접근 방식 :

첫째로, 당신은 읽기 최대 수있는 비트에 대한 JavaScript Promises, 특히 .then() 기능을해야합니다.

var webdriverio = require('webdriverio'); 
var options = { desiredCapabilities: { browserName: 'chrome' } }; 
var client = webdriverio.remote(options); 
client 
    .init() 
    .url('https://duckduckgo.com/') 
    .setValue('#search_form_input_homepage', 'WebdriverIO') 
    .click('#search_button_homepage') 
    .getTitle() 
    .then(function(title) { 
     console.log('Title is: ' + title); 
     // outputs: "Title is: WebdriverIO (Software) at DuckDuckGo" 
    }) 
    .end(); 

위의 방법을 사용하면 항상 체인에 명령이있을 것이다, 그러나 당신은 또한 .then() 문 내부 동기 명령을 사용할 수 있습니다. 디버그 목적

는 WebdriverIO 온다 아웃 오브 박스 .debug()command의 형태로 아름답게 디자인 읽기 평가 - 인쇄 - 루프 (REPL inferface)와. 실행을 멈추기 전에 테스트 케이스에 추가하기 만하면 원하는 터미널에서 디버깅 할 수 있습니다.

!!! 참고 :.debug() 명령의 기본 시간 초과는 짧습니다. 그것을 늘리십시오.


위의 방법을 찾을 경우 통증에 - 더 - 엉덩이 다음, 왜 WDIO의 테스트 -를 사용하지 너의 인생을 더 쉽게 만들 러너? 당신은 마법사를 실행하여 시작할 수 있습니다

// if you installed the package globally, or you have the wdio 
// binary in your PATH 
wdio config 
// or. from the root of your project 
./node_nodules/.bin/wdio config 

위의 프로젝트 루트에서 wdio.conf.js 파일을 산란한다. 테스트 주자가 테스트 케이스를 실행하는 데 사용됩니다. 테스트 주자는 또한 .client()의 초기화를 추상화합니다. 더 이상 다루지 않을 것입니다. 테스트 케이스 (모카, 오이 또는 재스민)를 실행하기위한 프레임 워크를 선택하고 테스트 작성을 시작하십시오.

!!! 참고 : 지금부터 browser이 드라이버 개체가됩니다. 또한 wdio.conf.js 파일이 테스트 사례를 실행하는 방법을 지원하도록 구성되었는지 확인하십시오.이 접근 방식을 지원하도록 sync-flag를 설정하십시오 (sync: true). 테스트는 wdio wdio.conf.js 명령을 통해 실행할 수 있습니다.

귀하의 테스트 (모카를 사용하여) 다음과 같아야합니다 (사용 WDIO test-runner)

var expect = require('chai').expect; 

describe("Testing Robots Emporium Test Suite", function() { 

    beforeEach(function() { 
     // ==> Your setup here <== 
     browser.url('http://www.kevinlamping.com/webdriverio-course-content/index.html') 
     var currentUrl = browser.getUrl(); 
     expect(currentUrl).include("/index.html");   
    }) 

    it("The FAQs was rendered properly", function() { 

     var height = browser.getCssProperty("ul.accordion", 'height'); 
     // Added a debug step just to show you how easy it is to debug 
     browser.debug(); 
     expect(height.parsed.value).to.be.above(300); 
     // The first element was expanded 
     var firstItemText = browser.getText('ul.accordion li:nth-of-type(1) div'); 
     expect(firstItemText).to.contain('be of the metal type.'); 
    }); 

    afterEach(function() { 
     // ==> Your cleanup here <== 
    }); 
}); 
  • 비동기 방법 : 이것은 내 이동이-하는 방법입니다

합니다. 그것은 당신에게 당신의 테스트 케이스 실행에 대해 가능한 최상의 제어를 제공하지만, 만약 당신이 막 시작한다면 나는 추천하지 않는다. 기본적으로 위의 예제이지만 모든 명령은 연결됩니다.

!!! 참고 :sync: false 플래그를 설정했는지 확인하십시오.

도움이 될지 알려주세요. 건배!

+1

동기 실행을 위해'sync : false'가'sync : false'가되어야합니다.'assert'가 아닌'expect'를 포함하고 정리를 위해'afterEach'를 사용하기를 원할 것입니다. 'beforeEach'가 아닙니다. –

+0

@ M.Herold에게 감사드립니다. 당신은 오류로 자리를 잡았습니다. 복사 - 그날 빨리 프로젝트에서 붙여 넣기. 힘내 친구 야! – iamdanchiv