Capybara / Rspec:填写多个单选按钮

时间:2016-07-29 17:01:12

标签: rspec capybara

我认为可能有更好的方法来做这个然后复制粘贴100次。

但基本上我有一个表格页面,有很多单选按钮(确切地说是95)。我正在使用page.find(:xpath)trigger('click')

Xpath看起来有点像这样:

page.find(:xpath, '/html/body/div/div[2]/div/div[2]/form/div[2]/table/tbody/tr[1]/td[2]/div/label').trigger('click')

每行单选按钮选项的TR [x]上升,TD [x]可供选择(1-10)

我真的只需要为每个TD选择1-10之间的随机数,进行自动化测试(只是为了确保它有效)。

某种for循环会实现这个吗?类似的东西:(我不熟悉红宝石,但这是我从快速谷歌中提取的)

for i in 1..85
   $h = 1 + rand(10)
   page.find(:xpath, '/html/body/div/div[2]/div/div[2]/form/div[2]/table/tbody/tr[i]/td[h]/div/label').trigger('click')
end

那会有用吗?

编辑:这是一行的HTML:

<tr class="all no-rate complete" data-original="2" change-check="false" the-row="17">
<td class="face">
<td class="face">
<td class="face">
<td class="face">
<div class="radio-inline radio-inline--empty">
<input id="set_stuff_17_rating_3" type="radio" name="set[stuff][17][rating]" value="3" data-control="" data-rating="" filter-class="complete">
<label class="integer opt" for="set_stuff_17_rating_3">Number Rating</label>
</div>
</td>
<td class="face">
<td class="face">
<td class="face">

2 个答案:

答案 0 :(得分:2)

给出有关页面实际结构的更新信息,如

<?xml version="1.0" encoding="UTF-8"?>
如果没有大的脆弱的XPath表达式,

会做什么。

答案 1 :(得分:1)

你可以迭代每一行:

page.all(:xpath, '/html/body/div/div[2]/div/div[2]/form/div[2]/table/tbody/tr').each do |el|
  $h = 1 + rand(10)
  el.find(:xpath, './td[#{h}]/div/label').click
end

请注意,您应该重构XPath以使其更易于维护。

使用您提供的HTML:

page.all(:xpath, "//form//tr[td[@class='face']]").each do |el|
  h = 1 + rand(10)
  el.find(:xpath, "(.//input[@type='radio'])[#{h}]").click
end