【问题标题】:indexing not reliable on WindowCollectionWindowCollection 上的索引不可靠
【发布时间】:2021-11-01 20:19:22
【问题描述】:

我已经升级到最近的 WATIR(7.0.0.beta5) 并且当我执行以下行时

@browser.windows.last.use

我收到了这个错误

"indexing not reliable on WindowCollection"

这在我之前的 WATIR 版本 (6.19.1) 中运行良好。有什么问题?

另一个问题是,看起来有很多功能变化。我现在必须分别设置page_load_timeoutread_timeout 吗?我也读过open_timeout,我不知道它是干什么用的,有人可以帮我理解它是什么吗?

【问题讨论】:

  • 我为您的主要问题添加了答案。您应该将第二个问题拆分为另一个问题,因为它完全不同,可能需要其他人来回答。
  • 当然可以。我在您的回答中添加了评论。使用 INDEX 访问是我唯一的方法。我在答案中解释了
  • 您可以在我们的博客上跟上变化:watir.com/watir-6-18/#browser-windows 此外,我们网站上的文档已更新:watir.com/guides/windows
  • @titusfortner 您在您的文章中写道“不再支持按索引定位”但是我已经使用 index 处理窗口很长时间了,它在 chrome 中打开的顺序对我来说非常适合.而且,我创建了一个框架,让用户可以决定使用索引与哪个窗口进行交互,到目前为止这对他们来说很容易。在我们的应用程序中,将打开 3 到 4 个窗口。还有我的问题是为什么要关闭该设施,而不是简单地允许它关闭。那些想用索引的人,让他们用,你说呢?
  • 这并不难理解。根据规范 (w3c.github.io/webdriver) “返回窗口句柄的顺序是任意的。”这是关于“最小惊喜原则”的。 #index 并不总是符合人们的预期,因此我们将 Watir API 更改为首选方法,以确保用户始终获得他们期望的行为。

标签: ruby watir


【解决方案1】:

驱动程序不能保证总是以相同的顺序返回窗口,因此决定不推荐基于它们的索引(即在窗口数组中的位置)访问窗口。你有几个选择。

使用 2 个窗口

如果您只使用 2 个窗口(可能是大多数情况),建议使用 2 种新方法:

# Switch to the second window that was opened
browser.switch_window 

# Return to the first window
browser.original_window

使用 3 个以上的窗口

最好的方法是根据已知属性定位您想要的窗口:

# By url
browser.window(url: /closeable\.html/).use

# By title
browser.window(title: 'closeable window').use

# By an element in the window (new)
browser.window(element: browser.a(id: 'close')).use

(不推荐)按索引

不建议这样做,但如果你坚持使用索引,你可以通过强制将 WindowsCollection 设置为 Array 来作弊:

browser.windows.each.to_a.last

【讨论】:

  • 我创建了一个框架,人们将在其中决定使用哪个窗口的索引来访问。他们不会编写 ruby​​ 代码,他们只是将操作提到为 switch_to_new_window 并在数据列中,他们只会给出要访问的窗口的数量。所以他们不必知道您提到的标题或其他细节。所以你最后的解决方案是唯一的方法。感谢您的回答。但我请求您提供一种再次使用索引访问窗口的方法。这对我们来说很容易。我们正在打开 4 到 5 个窗口。你的解决方案对我有用。我用browser.windows.to_enum.to_a.last .
  • 考虑到使用索引可能存在的不一致,最好让人们远离它(即不容易获得)。由于有一个非常简单的解决方法,重新添加旧行为真的有好处吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多