如何使用capybara填充动态表单字段

时间:2017-07-27 10:47:57

标签: ruby-on-rails-4 rspec capybara poltergeist

我有一个包含选择框和文本字段的表单。

根据选择框选择动态显示文本字段。如果selectbox的值为"是",则将显示文本字段,反之亦然。  我正在运行一个rspec测试并用&#34填充选择框值;是"

select 'Yes', from: 'property[have_water_bills]'

现在我想填写文本字段的值

fill_in 'property[irrigation_cycle_count]', with: 5

但是我收到了以下错误。

Capybara::ElementNotFound:
   Unable to find field "property[irrigation_cycle_count]"

也就是说,水豚找不到动态元素。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

当从选择中选择一个项目时,恶作剧者不会对click事件进行奖励。它会在选项focus选项change上生成blurchange。更像是用户使用键盘选择选项而不是使用鼠标。您可能应该使用逻辑来在change事件上显示您的文本字段,以便在人们使用鼠标或键盘在您的页面中导航时它可以正常工作。在command.CommandText = @"UPDATE sellinginventorytable SET cqty=cqty+@aqty,`date`=CURRENT_TIMESTAMP(),`user`=@user WHERE cid=?cid; INSERT INTO internaltranstable SET `type`='INV.ADJ.', `cid`=?cid, `cqty`=@aqty, `date`=CURRENT_TIMESTAMP(), `notes`='STORE INVENTORY ADJUSTMENT', `area`='COUNTER', `sender`=@user, `receiver`=@user;"; command.Parameters.AddWithValue("?cid", row.Cells["barcode"].Value); command.Parameters.AddWithValue("@aqty", row.Cells["aqty"].Value); command.Parameters.AddWithValue("@user", Properties.Settings.Default.user.ToUpper()); command.ExecuteNonQuery(); command.Parameters.Clear(); 事件上运行您的显示/隐藏逻辑更有意义,因为这是您真正关心的,而不是点击。

答案 1 :(得分:0)

最后使用以下代码

使其工作
page.execute_script("$('#have_water_bills').val('true').trigger('click')")