无法使用 Watir webdriver、Firefox、PayPal 沙箱定位元素使用 PayPal 支付

unable to locate element with Watir webdriver, Firefox, PayPal sandbox pay with PayPal

我遇到了错误

Watir::Exception::UnknownObjectException: unable to locate element, using 
{:id=>"submitLogin", :tag_name=>"input"} 
from /Users/ktobo/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/
gems/watir-webdriver-0.9.1/lib/watir-webdriver/elements/element.rb:536:in 
`assert_element_found'

当 运行 使用 Watir webdriver 和 Firefox 进行 Rspec 测试时。

# select "Pay with my PayPal account"
@browser.span(:class, 'buttonAsLink').when_present.click
@browser.text_field(:id, 'login_email').when_present(15).set(hsh[:email])
@browser.text_field(:id, 'login_password').when_present(15).set(hsh[:password])
@browser.input(:id, 'submitLogin').when_present.when_enabled.click
@browser.input(:id, 'continue').when_present.click

如果我在控制台中逐一执行这些步骤,一切都很好。当 运行 与 run.rb 的测试时,第一次点击操作似乎无法达到 select "Pay with my PayPal account" 的跨度。我不确定为什么它在那一步没有失败。如果我在失败后手动单击 link,我会看到密码字段未填充,所以在第四行之前似乎出了问题。

  1. 即使有 when_present 调用,如果它在 irb 中逐步工作,这很可能是竞争条件,但当 运行 直接在一起时则不会。在调试时,在问题步骤之前进行(长时间的)睡眠通常很有用,只是为了查看您是否遇到了竞争条件。如果睡眠修复了它,那么您就知道问题出在哪里了,只需要在点击之前找出正确的等待时间即可。

  2. 另一种可能性是,这可能是浏览器在操作系统 "active window" 中的问题。 (无论如何,命令应该以相同的方式工作,但情况并非总是如此)。

  3. 此外,运行使用 Chrome 进行测试以查看您是否有相同的问题也有助于解决问题。

如果 none 有效,请使用 url 或您正在与之互动的 html 更新您的问题。

顺便说一句,我很惊讶嵌套 when_presentwhen_enabled 的效果。 when enabled 可能应该包括 present? 作为先决条件,我会考虑这样做。