Angularjs 找不到未禁用的可见字段nil
我不确定我在这里做错了什么,因为我对水豚是完全陌生的。我可以找到一个元素Angularjs 找不到未禁用的可见字段nil,angularjs,selenium,ruby-on-rails-5,capybara,Angularjs,Selenium,Ruby On Rails 5,Capybara,我不确定我在这里做错了什么,因为我对水豚是完全陌生的。我可以找到一个元素 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-
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">
我在前端使用angularjs。另外,当我检查可见性时,如
all('.mold\u table\u input').last.visible?
它返回true
您使用的是哪种版本的水豚?我猜是<3.7,因为在这里添加了对要修改的元素调用fill_in
的功能。在3.7版本之前,它只会尝试找到一个有效的后代来处理。即使在3.7+版本中,当您有一个简单的唯一定位器时,也不建议像您尝试的那样使用fill_in
,因为它会无缘无故地增加开销。在本例中,您正在处理一个唯一的元素定位器(元素id在HTML页面上应该是唯一的),因此您不需要使用“all(…).last”,只需这样做即可
fill_in ‘mold_table_input’, with: ‘02’
与此相关的一点是,如果您确实需要为更复杂的交互定位元素,那么当您拥有可以唯一定位的元素时,您确实应该更喜欢
find
而不是all
。不仅find
会更快,而且all
在动态页面上有一些微妙的限制 我不知道细节,只是为了帮助别人,下面这句话起了作用
find('.mold_table_input', match: :first).set('06')
我可以通过先查找并使用set来设置输入字段的值,而不是
fill\u in
您是否尝试过没有必要执行find.set-只需使用fill\u in-fill\u in('mold\u table\u input',with'06',match::first)
如果您确实需要:第一次匹配(您不应该这样做,因为ID必须是唯一的——所以需要:首先意味着您拥有无效的HTML)
find('.mold_table_input', match: :first).set('06')