Watir 无法与元素交互并报告它们已禁用

Watir fails to interact with elements and reports that they are disabled

在为各种 OAUTH 提供程序自动执行一系列集成测试时,我发现 watir 似乎无法与 Fitbit 身份验证页面一起使用,并且总是报告 text_fields 已禁用,无论我做什么.

这可能是 watir 中的错误,也可能是 Fitbit 页面特有的东西(损坏的 HTML 或故意的反脚本代码)。

fitbit 页面位于https://www.fitbit.com/oauth2/authorize/

watir 可以检测到电子邮件 text_field 存在: browser.wait_until{ browser.text_field( name: 'email' ).exists? }

但是任何与之交互的尝试都会报告一个错误,表明它已被禁用: browser.text_field( name: 'email' ).wait_until_present

我试过使用 Tab 键浏览页面上的所有字段以查看是否启用它,并且我试过使用 browser.driver.action.move_to 单击该元素,但似乎没有任何效果。

有什么想法吗?

问题是有 3 个名称为 "email" 的文本字段。如果您获取了文本字段的集合,您会发现其中只有一部分是可见的:

browser.text_fields(name: 'email').map(&:visible?)
#=> [false, true, false]

Watir 与第一个匹配项交互,在本例中是隐藏字段之一。您实际上想要第二个字段 - 即可见字段。

您可以使用 :visible 标志告诉 Watir 找到第一个可见的:

browser.text_field(name: 'email', visible: true).set('value')