Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 找不到未禁用的可见字段nil_Angularjs_Selenium_Ruby On Rails 5_Capybara - Fatal编程技术网

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')