从每个元素中获取文本

时间:2015-12-09 12:34:16

标签: ruby watir-webdriver

需要获取金额文本并检查它是否< 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&amp;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&amp;come=0" class="yellow front">BUY</a>
    </div>
</div>

以这种方式格式化文本

browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text

3 个答案:

答案 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