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 反对这种行为的原因。

Usingtextarea只返回一个对象,而不是一个集合。这就是[]未定义的原因。

使用textareas返回文本区域,而不是两者的组合。这个文本区域可能是页面上的第一个区域,稍后您还有另一个没有 id 的区域。如果你没有多个,我希望你会得到一个错误,说没有这样的元素。

我强烈建议不要依赖元素的位置;它往往会使您的测试过于脆弱。相反,您应该酌情使用选择器(CSS 或 XPath)。例如,您应该能够使用类似的东西

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