如何检查<div>中的文本?</div>

时间:2011-03-12 21:56:30

标签: ruby watir firewatir

我正在尝试访问位于DIV中的某些文本 我需要检查页面是否包含文本,以便返回true或false 我正在使用的代码如下:

cancel = browser.text.include?("Current Cancelled")
if cancel == true
puts "Line item cancelled"
else
puts "****Line item not cancelled****"
end

但每次都会返回假 这是我正在研究的代码片段:

enter image description here

6 个答案:

答案 0 :(得分:4)

我真的建议使用Nokogiri来解析内容。

require 'nokogiri'

doc = Nokogiri::HTML('<div><span class="label">Current</span>Cancelled</div>')
doc.at('//div/span[@class="label"]/../text()').text # => "Cancelled"

(doc.at('//div/span[@class="label"]/../text()').text.downcase == 'cancelled') # => true
!!(doc.at('//div/span[@class="label"]/../text()').text.downcase['cancelled']) # => true

类似于两个底部语句中的一个会使您获得可用的真/假。

答案 1 :(得分:4)

这可行的原因是因为您正在测试的字符串包含换行符和非中断空格。

这可行......

if browser.div(:text, /Current.*Cancelled/).exists?
  puts "Line item cancelled"
else
  puts "****Line item not cancelled****"
end

if browser.text =~ /Current.*Cancelled/
  puts "Line item cancelled"
else
  puts "****Line item not cancelled****"
end

答案 2 :(得分:1)

Watir的Browser对象现在有 #elements_by_xpath 方法...... 请参阅Watir的API

只需指出你的DIV并询问其 #text 方法。非常像the Tin Man所暗示的但不需要nokogiri。

AFIK Watir内部完全用于定位元素(它是Watir安装的依赖宝石)无论如何。

答案 3 :(得分:1)

我认为文本在表格内部的事实导致了这个问题。

您可以考虑在表格中钻取:

cancel = browser.table(:class, 'basic-table').each { |row|
  test = row.text.include?("Current Cancelled")
  return test if test == true
}

答案 4 :(得分:1)

  

哇。那讲得通。我不知道我怎么样   可以拆分这些并让他们去   结合我的检查。

好的,这是一个非常快速的草稿:

div = browser.table(:class, 'basic-table').div(:text, /Cancelled/)

cancel = div.exist? and div.span(:index, 1).text == 'Current'
if cancel
   puts "Line item cancelled"
else
   puts "****Line item not cancelled****"
end

答案 5 :(得分:1)

您还可以将下面的一些正则表达式方法(主要是来自Kinofrost的方法)结合起来,并将其缩小到仅查看表格内单个单元格的想法。这应该更快,如果“当前”和“已取消”这两个词在页面的其他位置之间以及它们之间的任何内容发生,则不太容易出现虚假警报。

if browser.table(:class, 'basic-table').cell(:text, /Current.*Cancelled/).exists?
   puts "Line item cancelled"
else
   puts "****Line item not cancelled****"
end