0

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, ''))
 }
4

1 に答える 1