Watir元素存在但不存在,但在屏幕截图中可见

时间:2015-04-09 18:29:26

标签: watir-webdriver

出于某种原因,Watir说我的页面的页脚不可见。

我的测试设置为截屏,我可以在页面截图中看到页脚。

我通过以下方式截取屏幕截图:

@browser.driver.save_screenshot(output + "/" + screenshot)

在代码中测试行:

puts "waiting for bottom sticker"
Watir::Wait.until { @browser.div(:id => "bottom-sticker").exists? }
puts "bottom sticker found"
puts "bottom sticker exists: " + @browser.div(:id => "bottom-sticker").exists?.to_s
puts "bottom sticker present: " + @browser.div(:id => "bottom-sticker").present?.to_s
puts "bottom sticker visible: " + @browser.div(:id => "bottom-sticker").visible?.to_s

测试日志:

  waiting for bottom sticker
  bottom sticker found
  bottom sticker exists: true
  bottom sticker present: false
  bottom sticker visible: false

Watir报告页面中的其他元素是可见的和存在的。底部贴纸div是一个身体的孩子,所以它不被父母隐藏。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我发现这个问题不是由于watir,而是源于硒。我最终找到了Selenium docs的链接。我确实有溢出:在我的div上隐藏样式并删除它使内容在Watir中可用。

Selenium必定存在一些问题,因为内容肯定没有溢出,并且在使用selenium浏览器拍摄的屏幕截图中绝对可见。

答案 1 :(得分:0)

您需要等到元素存在。

现在你正在等待它存在,这意味着它只等到在html中找到元素而不在屏幕上。等到现在将等到HTML中找到元素 AND 在屏幕上。参考下面的注释以了解使用哪个断言:

Watir中使用三种不同的方法来确定浏览器中的对象状态。它们是.exists?,。present?和.visible?。

首选方法是.present?

三者之间的差异是:

.exists?

    如果元素在HTML中,则
  • 返回true(无论是否显示在 屏幕与否)
  • 如果元素不在HTML 中,则
  • 返回false

.present?

    如果元素在HTML中并显示在
  • 上,则
  • 返回true 屏
  • 如果元素在HTML中并且未显示在
  • 上,则
  • 返回false 屏幕或如果元素不在HTML

。可见?

    如果元素在HTML中并显示在
  • 上,则
  • 返回true 屏
  • 如果元素在HTML中并且未显示在
  • 上,则
  • 返回false 屏
  • 如果元素不在HTML 中,则
  • 抛出错误