electron9~10あたりで、UIテストツールであるspectronのバックエンドのwebdriverioが、v4から v5に更新されました。
呼び出しが非同期に変化して、これまでのメソッドチェーンを使う記法が動作しなくなったため、テストの全面書き直しが必要となります。
webdriverio自体に実践的なサンプルが見つからなかったりして難儀しましたが、いろいろ調べて、最終的に参考にしたのはwebdriverioのドキュメントでした。
https://webdriver.io/docs/api.html
```
it('can handle commands using async/await', async function () {
const inputElement = await $('#input')
let value = await inputElement.getValue()
console.log(value) // outputs: some value
})
```
以前のspectron(WebdriverIO v4のメソッドチェーン)
```
it("input basic test", function() {
return this.app.client.waitForVisible('#query-area__query-input__input')
.waitForEnabled('#query-area__query-input__input')
.clearElement('#query-area__query-input__input')
.setValue('#query-area__query-input__input', "Bonan matenon!")
.getValue('#query-area__query-input__input')
.then(function(text){assert(text === 'Bonan matenon!')})
})
```
新しいspectron(WebderiverIO v5のasync/await)
```
it("input basic test", async function() {
const inputElement = await this.app.client.$('#query-area__query-input__input');
let text;
text = await inputElement.getValue();
console.log(`before:'${text}'`);
await inputElement.waitForEnabled()
await inputElement.clearValue()
await inputElement.setValue("Bonan matenon!")
text = await inputElement.getValue();
console.log(`after:'${text}'`);
assert(text === 'Bonan matenon!')
// assert(text === '') // test to test (falure)
})
```
今回書き換えたソース:
https://github.com/MichinariNukazawa/lina_dicto/blob/master/lina_dicto/test/input_ui.js
## Element がないことをテストする処理に時間がかかる?
```
// このnot existテスト部分で5000msec近くかかるようだが詳細不明
isExisting = await preprintElement.isExisting();
assert(! isExisting); // not exist
```
以上です。