@ driver.find_element(:id =>“body”)。text.include?(textcheck)不验证文本只有id

时间:2012-10-16 20:15:39

标签: ruby selenium webdriver

我正在使用Selenium-WebDriver for Ruby,我正在尝试验证页面上是否存在文本。我做了很多搜索并尝试了很多东西,我找到的最佳答案是使用像

这样的东西
  def check_page(textcheck)
  if verify {@driver.find_element(:id=>"body").text.include?(textcheck)}
    yield it_to "fail"
  else
    yield it_to "pass"
  end
  end

如果正文中存在textcheck的值,则预期结果将被传递,如果textcheck的值不存在于正文中则会失败。实际发生的是if:id =>“body”存在然后传递,如果它不存在则无论是.text.include都会失败?(textcheck)

如果有人能指出我如何使用Ruby中的Selenium-WebDriver验证文本是否出现在正确的方向,我们将不胜感激。我找到了某些我可以做的事情的解决方法

verify {@driver.find_element(:tag_name, 'h1').text!=(textcheck)}

但是我试图验证的元素我不能轻易搞定。我查看了css定位器,并对如何简化标签非常困惑,所以我可以使用它。任何帮助将不胜感激。非常感谢你。如果您需要我的更多信息,请告诉我,我会尽快提供。

我在Firefox 14.0.1中使用Ruby 1.93和Selenium-WebDriver 2.25测试

1 个答案:

答案 0 :(得分:4)

我是这样做的

@wait = Selenium::WebDriver::Wait.new(:timeout => 30)
begin
  @wait.until { @driver.find_element(:tag_name => "body").text.include?("your text")}
rescue  
  puts "Failure! text is not present on the page"
  #Or do one of the options below
  #raise
  #assert_match "true","false", "The text is not present"
end

更新


在评论部分回答您的问题。

有两种“等待”,隐式等待和显式等待。您可以阅读更多相关信息here。您的代码失败的原因是您通过“id”=>“body”而不是“tag_name”=>“body”进行搜索。通常,所有文本都包含在DOM中的“body”HTML标记中。