隐藏文本时如何使用水豚查找文本?

时间:2019-05-03 13:34:31

标签: firefox capybara

我刚刚进入自动化测试,并且一直在针对不同的浏览器进行不同的测试。我正在尝试在页面上找到特定的文本(邮政编码,以前是从其他字段读取的),我使用的代码对于Chrome来说效果很好,但是对于Firefox来说,它一直在超时。我使用过page.all(),因为它遍历整个页面需要花费一段时间,这就是为什么它超时的原因。

我尝试使用find_all(),但是这样做基本上相同,并且再次弹出相同的错误。我还尝试过在page.all()之后插入sleep(),但是自从page.all()首先运行但仍然超时以来,它什么也没做。

还有其他方法可以在页面上找到邮政编码吗?

请注意,如果有人知道我可以向下滚动页面,那也可以,因为那样一来,文本就不会被隐藏,而基本的find()可以完成工作。

1 个答案:

答案 0 :(得分:0)

您的问题有很多不正确的地方,所以让我们先更正这些错误。

  1. page.allpage.find_allfind_all是完全相同的东西-因此,一个接一个地尝试是没有意义的,也没有任何区别。

    < / li>
  2. 如果问题是页面加载缓慢,而您打算使用睡眠,则需要将其放在page.all之前,以查看是否有任何区别-等待页面加载然后进行搜索

  3. 您的代码未超时,因为all需要一段时间。与all的默认设置相比,Capybara.default_max_wait_time的单次运行所花费的时间最少,并且实际上在等待匹配元素发生时,搜索实际上会运行多次。可能由于浏览器加载页面缓慢而超时,但这与all

  4. 的速度无关
  5. 仅在页面被延迟加载时才滚动页面。文本不会从水豚中隐藏,因为它位于折叠以下,仅当页面上未显示时才会隐藏。那就是如果它有CSS导致它根本不显示。

好的-现在开始寻找潜在的解决方案。

  • 您不显示您的代码或得到的确切错误消息(将来在对SO提出问题时的良好做法),因此我不知道您正在运行什么,但是如果使用Timeout时实际上收到all错误(并且您尚未指定任何count选项),那么您使用的geckodriver版本很可能与Firefox版本不兼容你有。这是因为all如果找不到任何内容(不是超时错误),将返回一个空数组。

  • 如果相反,您只是表示all未找到元素并返回空数组,则可能是Firefox由于某些原因正在缓慢加载此特定页面,并且您可以增加最大等待时间Capybara.default_max_wait_time = 10

  • 之类的时间
  • 如果页面实际上是在延迟加载内容,因此直到滚动到底部,页面中才真正存在该内容,然后您可以使用

    向下滚动页面

    page.scroll_to:bottom

然后应该触发延迟加载,尽管如果是这种情况,我预计Chrome也将失败(除非您正在使用不同的窗口大小进行测试,因此不需要使用Chrome滚动浏览,而使用Firefox滚动浏览