我不知道我在做什么错,因为我对水豚完全陌生。我可以用
找到一个元素all('.mold_table_input').last
#<Capybara::Node::Element tag="input" path="/html/body/md-content/section/md-content/md-tabs/md-tabs-content-wrapper/md-tab-content/div/div/div/md-card/md-card-content/div/form/md-content/table/tbody/tr[1]/td[1]/input">
但是当我尝试all('.mold_table_input').last.fill_in(with: '02')
时,出现以下错误
Capybara::ElementNotFound: Unable to find visible field nil that is not disabled within #<Capybara::Node::Element tag="input" path="/html/body/md-content/section/md-content/md-tabs/md-tabs-content-wrapper/md-tab-content/div/div/div/md-card/md-card-content/div/form/md-content/table/tbody/tr[3]/td[12]/input">
我在前端使用angularjs。另外,当我检查像all('.mold_table_input').last.visible?
这样的可见性时,它会返回true
答案 0 :(得分:1)
您使用的是什么版本的水豚?我猜<3.7,因为那是添加了在要修改的元素上调用fill_in
的功能。在3.7之前,它将仅尝试找到有效的后代进行处理。即使您在使用简单的唯一定位器时,即使在3.7+中使用fill_in
也不建议您尝试使用 fill_in ‘mold_table_input’, with: ‘02’
,因为它毫无理由地增加了开销。在这种情况下,您要处理一个唯一的元素定位符(元素ID在HTML页面上应该是唯一的),因此您无需使用‘all(...)。last`,只需这样做
find
在相关说明中,如果确实需要定位某个元素以进行更复杂的交互,那么当您具有可以唯一定位的元素时,您实际上应该更喜欢all
而不是find
。 all
不仅会更快,而且{{1}}在动态页面上也有一些微妙的限制。
答案 1 :(得分:0)
我不知道这些细节只是为了帮助别人,下面几行就可以了
find('.mold_table_input', match: :first).set('06')
我能够通过首先找到并使用set而不是fill_in
来设置输入字段的值