0

私はテストアサーションを持っています:-

expect(browser.text_fields[2].id).to eq "new_user_email"

合格しましたが、次の非推奨警告メッセージが表示されます。

Locating textareas with '#text_field' is deprecated.  
Please, use '#textarea' method instead.

テストを次のように変更してみました

expect(browser.textarea[2].id).to eq "new_user_email"

しかし得た

undefined method `[]' for #<Watir::TextArea:0x00000001c128d8>

そして私は試しました

expect(browser.textareas[2].id).to eq "new_user_email"

そして得る

 Failure/Error: expect(browser.textareas[2].id).to eq "new_user_email"

   expected: "new_user_email"
        got: ""

私はソースを見ましたが、それは私を助けませんでした:-

VALID_TEXT_FIELD_TAGS = %w[input textarea]

def tag_name_matches?(tag_name, _)
  VALID_TEXT_FIELD_TAGS.include?(tag_name)
end

def by_id
  el = super
  el if el and not NON_TEXT_TYPES.include? el.attribute(:type)
end

def validate_element(element)
  if element.tag_name.downcase == 'textarea'
    warn "Locating textareas with '#text_field' is deprecated. Please, use '#textarea' method instead."
  end
  super
end

非推奨の警告を取り除くにはどうすればよいですか?

4

1 に答える 1

1

あなたのページには複数のテキスト フィールドと複数のテキスト領域があると思います。

元のコードtext_fieldsは、テキスト フィールドとテキスト エリアの両方を取得し、それらを同じコレクションに配置します。これは少し驚くべきことであり、おそらく watir がその動作を非推奨にしている理由です。

を使用textareaすると、コレクションではなく単一のオブジェクトのみが返されます。そのため[]、未定義です。

を使用すると、両方の組み合わせではなく、テキスト領域のみtextareasが返されます。このテキスト領域はおそらくページの最初であり、後で ID のない別の領域があります。複数持っていない場合は、そのような要素がなかったというエラーが表示されると思います。

要素の位置に依存しないことを強くお勧めします。テストが脆弱になりすぎる傾向があります。代わりに、必要に応じてセレクタ (CSS または XPath) を使用する必要があります。たとえば、次のようなものを使用できるはずです

browser.textarea(id: 'new_user_email')
于 2013-10-27T15:03:22.603 に答える