まあ、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
フラグが設定されていることを確認してください。
これが役立つかどうか教えてください。乾杯!
あなたのコメントにいくつかの誤りがあります。つまり、同期実行のために 'sync:false'を' sync:true'にする必要があります。 'expect'を' assert'に含めずに 'afterEach'を使って、 'beforeEach'ではありません。 –
@M.Heroldさん、ありがとう!あなたは間違いに気づいていました。その日の急いでプロジェクトからコピー貼り付け。歓声メイト! – iamdanchiv