我认为可能有更好的方法来做这个然后复制粘贴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">
答案 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