Nightwatch コードベースでは、ページ オブジェクト パターンを利用しています。
チェック全体で使用する関数を作成しようとしているselectFromDropdown
ので、これを customCommands フォルダーに入れるのが理にかなっていると思いました。
ここで、selectFromDropdown
ページの js ファイルで関数を使用すると、コードは次のようになります。
selectFromDropdown('@minMonthlyPrice', min, client)
Nightwatch に詳しい人なら誰でも、@ ビットが要素を参照していることに気付くでしょう。
そう…最後に私が直面している問題 - この @ スタイルセレクターをうまく通過できないようです。実行するとこのエラーが表示されます...
.locateMultipleElements() プロトコル アクションの実行中にエラーが発生しました: 無効なセレクタ: 無効または不正なセレクタが指定されました
ただし、css セレクター パスを selectFromDropdown 関数に直接渡すと、すべて正常に動作します。
誰かがこの問題を克服する方法を見つけましたか? カスタマー コマンドで @ セレクターを使用することはできますか?
これに従って、エクスポート関数をクラスとして書き直そうとしました: https://nightwatchjs.org/guide/extending-nightwatch/#writing-custom-commands しかし、違いはないようです。前述したのと同じ動作を経験していました。
どんな助けでも大歓迎です!
編集 - 03/10/19
カスタム コマンド SelectFromDropdown は、SelectFromDropdown 関数を使用するページ ファイルにインポートされています。このページ ファイル内では、@ セレクターの css パスも宣言しています。
import { SelectFromDropdown } from'../../customCommands/selectFromDropdown
selectFromDropdown js.file 内のコードは次のようになります。
export function selectFromDropdown(cssSelector, value, client) {
client.waitForElementVisible(cssSelector, 10000)
client.click(cssSelector, () => {
client.waitForElementVisible(`option[value="${value}"]`, 10000)
client.click(`option[value="${value}"]`)
})
.assert.value(cssSelector, value.replace(/'/g, ''))
}