環境
- node:10.15.3
- nightwatch: 1.3.4
- chromedriver: 80.0.1
前提
- Nightwatchでフォームへの入力を模すにはsetValue()を使う
- 既にフォームに何らかの値が入力されている場合、既存の値に付け加えるかたちで入力されてしまう
- 既存の値をリセットするためにclearValue()を使えと公式リファレンスには書かれている
setValue does not clear the existing value of the element. To do so, use the clearValue() command.
問題
clearValue()が動かない。
issueにあがっていた以下の対策を試してみたがダメだった。
-
nightwatch issue#504
- clearValue()をする前に当該要素にclick()すると動くよ
-
nightwatch issue#1592 その1
- setValue('element', '')で空文字入れるといいよ
-
nightwatch issue#1592 その2
- setValue()で入れる -> clearValue()で消す -> setValue()でもう1回入れるでうまくいくよ
解決法
最終的にこの方針に落ち着いた。
-
nightwatch issue#1592 その3
- getValue()で要素を取得してその文字数分方向キー右とバックスペースで消す
ただsetValue()
にRIGHT_ARROWとBACK_SPACEを渡すとエラーが出て自分の環境では動かなかった。
そのため、setValue()の代わりにbrowser.keys(key)
を用いてボタン操作をしてやることで期待する操作をすることができた。
削除コマンド
const clearCommand = {
clear: function(browser, locator) {
return browser
.waitForElementVisible(locator, 1000)
.click(locator)
.getValue(locator, function(result) {
const length = result.value.length;
for (let i = 0; i < length; i++) {
browser.keys(browser.Keys.RIGHT_ARROW);
}
for (let i = 0; i < length; i++) {
browser.keys(browser.Keys.BACK_SPACE);
}
});
}
};