2017-11-07 21 views
1

http://webdriver.io/guide/getstarted/modes.htmlスタンドアロンモードでwebdriverioを同期して実行するには?

Chromedriverを使用してwebdriverioテストをデバッグしようとしています。 webdriverioコマンドは非同期で、ブラウザセッションはテストと同期していないため、コードをステップ実行することはできません。

これはドキュメントを読んでいるので、テストを生成するにはChaiやwdioのようなテストフレームワークが必要だと思うのですが、これは手続き同期コマンドを持つだけの多くの作業のようです。

webdriverioを使用して一部のWebサイトをクロールするだけですが、この非同期コマンドはChrome devtoolsを使用してデバッグするのが非常に難しいです。

webdriverioに強制的に動作させる方法はありますか? loadedPage除く

EX)

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

準備ができていないと、次の行までの時間デバッグ移動によって定義されていません。

答えて

1

まあ、WebdriverIOは、自動化フレームワークの宝石であり、包括的なdocumentationはその強力なスーツの1つです。あなたが正しく指摘したように、はすべて非同期ですが、従来のシーケンシャルプログラミングのバックグラウンドから来た場合は、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の形で美しいデザイン読む-EVAL-PRINT-ループ(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()の初期化も抽象化します。あなたはそれ以上対処していません。テストケース(Mocha、Cucumber、またはJasmine)を実行するためのフレームワークを選択してテストを書くだけです。

!!!注:これ以降、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:true'にする必要があります。 'expect'を' assert'に含めずに 'afterEach'を使って、 'beforeEach'ではありません。 –

+0

@M.Heroldさん、ありがとう!あなたは間違いに気づいていました。その日の急いでプロジェクトからコピー貼り付け。歓声メイト! – iamdanchiv

関連する問題