我正在尝试访问位于DIV中的某些文本 我需要检查页面是否包含文本,以便返回true或false 我正在使用的代码如下:
cancel = browser.text.include?("Current Cancelled")
if cancel == true
puts "Line item cancelled"
else
puts "****Line item not cancelled****"
end
但每次都会返回假 这是我正在研究的代码片段:
答案 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