0

watir-webdriverを使用して、テキストフィールドの値を設定しようとしています。

browser.text_field(:id, "phoneNumbers_value_input").set("5555551234")

そのコマンドを実行すると、カーソルがそのフィールドに設定されているがテキストが入力されていないため、watirがフィールドを見つけたことがわかります。send_keysコマンドとappendコマンドも試しましたが、何も機能していないようです。これらのメソッドから例外はスローされません。

このフィールドとページ上の他のフィールド(すべて正常に機能します)との唯一の違いは、このJQueryマスクが含まれていることです。

$(selector).mask("(999) 999-9999");

テキストフィールドを設定する方法について何かアイデアはありますか?

編集:

Javascriptのいくつか:

selector = '#' + id(field.id) + '_input';
if (field.format == 'phone') {
  $(selector).mask("(999) 999-9999");
}

フィールドのHTML:

<div id="phoneNumbers_value_form_item" class="form_item validated no_focus">
  <label for="phoneNumbers_value" class="form_label">phone</label>
  <input type="text" value="" name="phoneNumbers[][value]" id="phoneNumbers_value_input" class="text">
  <div class="tip">&nbsp;</div>
  <div class="tip_validating">

  </div>
  <div class="tip_error">

  </div>
</div>
4

2 に答える 2

1

投稿の上部にあるルビーコードでアドレス指定されているテキスト入力フィールドと一致する要素がHTMLに表示されません。たとえば、「電話」のIDを持つものはありません

あなたの質問のHTMLに基づいて、私は以下が機能することを期待します

browser.text_field(:id, "phoneNumbers_value_input").set("5555551234")

コメントでリンクしたサンプルページを見ると、グーグルクロームと「電話」のIDを持つ入力フィールドで「要素の検査」機能を使用すると、フィールドに関連付けられたイベントリスナーが多数あることがわかります(ぼかし、フォーカス、入力、キーダウン、キープレス、マスク解除)

特に「フォーカス」の方が注目されます。そのフィールドでそれを見ると、フィールドをアクティブ化するために、最初にオンフォーカスイベントなどの同じ要素に対してイベントを発生させる必要があるかもしれないと思います。値を設定してみてください。

手動で操作すると、フィールドは空白で始まりますが、フォーカスを取得するとすぐに、入力マスクの形式がユーザーに表示されます。これは、表示される前に最初に行う必要がある可能性があります。あらゆる種類の入力。

編集:この場合、質問者からのフィードバックに基づいて、答えは、最初にテキストフィールドに対して「マスク解除」イベントを発生させ、次に、物事が機能するために必要な値を設定する必要があるということでした。テストを自動化するときに正しく。これはフィールドマスキング機能を実行しませんが、この場合のテストの使命はサードパーティ(JQuery)アドインを広範囲にテストすることではなく、バックエンドのビジネスロジックなどに関心があります。マスキングコードが邪魔にならずに値を設定できることが必要です。

于 2011-06-03T21:39:01.420 に答える
1

問題は、テキストフィールドに焦点を当てることに関係しています。.click()を使用しても、入力フィールドの場合、Webドライバーの最後にカーソルが表示されます(問題2377を参照)。HOMEキーを押すと、カーソルが先頭に移動し、入力フィールドに入力しても、マスク機能を使用できます。

Javaの場合:

WebElement txtPhone = getDriver().findElement(By.id("phoneNumbers_value_input"));
txtPhone.sendKeys(org.openqa.selenium.Keys.HOME);
txtPhone.sendKeys(phoneNumber);
于 2013-07-09T09:42:15.177 に答える