我有一个测试断言: -
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
如何摆脱弃用警告?
答案 0 :(得分:1)
我猜测你的页面有多个文本字段和多个文本区域。
text_fields
的原始代码会抓取文本字段和文本区域,并将它们放入同一个集合中。这有点令人惊讶,可能是为什么watir不赞成这种行为。
使用textarea
仅返回单个对象,而不是集合。这就是[]
未定义的原因。
使用textareas
只返回 文本区域,而不是两者的组合。这个文本区域可能是页面上的第一个文本区域,稍后您还有另一个文本区域没有ID。如果你没有多个,我希望你会得到一个错误,说没有这样的元素。
我强烈建议不要依赖你元素的位置;它往往会使你的测试太脆弱。相反,您应该根据需要使用选择器(CSS或XPath)。例如,您应该可以使用类似
的内容browser.textarea(id: 'new_user_email')