需要获取金额文本并检查它是否< 5000然后单击类
中的下一个元素UI
如果我得到价值< 5 000我点击了索引+ 1'。这个怎么循环?
<div class="single sort">
<div class="svariant front one" id="114_0">
<img src="http://pics.avs.io/al_square/24/24/TK@2x.png" class="airlogo" title="Turkish Airlines">
<div class="amount">4 479
<span class="rub">Р</span>
</div>
<a href="/travel/Order/Index/h7676Rn7471rdd?fid=349&come=0" class="yellow front">BUY</a>
</div>
</div>
<div class="single sort">
<div class="svariant front one" id="113_0">
<img src="http://pics.avs.io/al_square/24/24/TK@2x.png" class="airlogo" title="Turkish Airlines">
<div class="amount">9 479
<span class="rub">Р</span>
</div>
<a href="/travel/Order/Index/h7676Rn7471rdd?fid=349&come=0" class="yellow front">BUY</a>
</div>
</div>
以这种方式格式化文本
browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text
答案 0 :(得分:1)
您可以创建一个Range
,然后对其进行迭代,这样可以增加索引。这是一个hacky,人为的例子:
(0..1).each do |i|
amount = b.div(:class => 'single sort', :index => i).div(:class, 'amount').text.gsub!(/\D/, "")
amount = amount.to_i
next if amount < 5000
puts amount #=> 9479
end
由于HTML代码段中没有<a>
个代码,因此不清楚应该点击什么,但您可能会使用puts amount
操作替换click
。< / p>
答案 1 :(得分:1)
这里有更普遍的方式,对于任何给定元素范围,没有硬编码(0..1),有2个元素,或324834:)
b.divs(:class => 'single sort').each {|x| if x.text.gsub!(/\D/, "").to_i<5000; puts x.text; else; puts "The value is #{x.text}"; end}
答案 2 :(得分:1)
而不是在小于5000的元素之后找到第一个,我认为找到5000或更大的第一个元素会更容易。以这种方式查看问题,您可以简单地创建div的元素集合。然后find
文本与指定条件匹配的第一个。{/ p>
match = browser.divs(class: 'single sort').find do |div|
div.div(class: 'amount').text.tr('^0-9', '').to_i >= 5000
end
match.link(class: 'yellow front').click
如果您希望在小于5000之后找到第一个,则可以使用drop_while
方法。删除不符合条件的元素后,集合中的第一个元素将大于5000。
matches = browser.divs(class: 'single sort').drop_while do |div|
div.div(class: 'amount').text.tr('^0-9', '').to_i < 5000
end
matches.first.link(class: 'yellow front').click