【问题标题】:Watir #when_present inconsistent timeout issueWatir #when_present 不一致的超时问题
【发布时间】:2016-05-13 13:06:11
【问题描述】:

我正在使用 Rspec 和 Watir-webdriver 进行一些自动化操作——目前我有两种不同的方法,它们使用像这样的通用 sn-p

# The snippet shown is meant to find a specific div, and when an element within it is present, then perform the click action
search_modal = @browser.div(:class, 'asset-search')
search_modal.when_present do
    search_modal.div(:class, 'quick-search').click
end

我用一种方法运行它,它工作正常,没有错误。我用第二种方法运行它,它会在 30 秒后超时。快进到今天早上,第二种方法现在正在正常运行。
同样,这是在两种不同方法中使用的相同代码。使用#wait 方法是否存在一些潜在问题?如果这些以易碎或挑剔而闻名,是否有更好的编码方法?

谢谢

【问题讨论】:

  • 您确定问题出在等待方法上吗?当等待超时时,您看到预期的元素了吗?您要验证的两件事是(1)元素是否通常需要接近 30 秒才能出现,因为这意味着有时会超过或低于时间限制,以及(2)是触发 search_modal 始终有效的操作?作为后者的一个例子,我有一些自动完成控件,其中设置文本字段会导致打开自动完成列表的结果不一致 - 即问题在于触发模式而不是等待模式。
  • @JustinKo,我想说两者兼而有之。我在屏幕上看它时,它会去正确的地方,但在终端超时 30 秒后说它找不到正确的元素 - 当它实际到达那里时会令人困惑!

标签: rspec automation watir-webdriver


【解决方案1】:

我怀疑您的部分问题可能是您正在创建一个变量,该变量一旦创建就基本上是静态的。所以它要么是一个 div 对象,然后通过当前测试,要么是一个空对象,它将在出现之前超时。 (除非我很困惑)

试试这个,看看它是否效果更好。

@browser.div(:class, 'asset-search').div(:class, 'quick-search').when_present.click

如果出现错误,您可能需要分两个阶段进行

@browser.div(:class, 'asset-search').wait_until_present
@browser.div(:class, 'asset-search').div(:class, 'quick-search').when_present.click

或者,如果只有一个带有快速搜索类的 div 实例(因此您不需要限制浏览器在资产搜索 div 中查找它),那么您可以这样做

@browser.div(:class, 'quick-search').when_present.click

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 1970-01-01
    • 2017-04-03
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2017-07-29
    • 2011-03-25
    相关资源
    最近更新 更多