【问题标题】:Watir crashes if I loop several times on the same pages如果我在同一页面上循环多次,Watir 会崩溃
【发布时间】:2018-07-17 16:26:35
【问题描述】:

我已将一些证据自动上传到我与 watir 一起工作(我无法提供详细信息)的合规内网。

我做了一些简单的事情,比如打开一个到该 Intranet 的 firefox 会话,而不是一个循环通过我作为命令行参数传递的每个服务器。它使用表单搜索该服务器,该表单执行点击以上传证据(一个 zip 文件)。

ARGV.each do|server|
  shotname = "#{download_directory}/foo_#{server}.png"
    b.goto 'https://compl.intra.secret.com/index.php'

    l = b.link text: 'Systems'
    l.wait_until_present
    l.exists?
    l.click

  ....
  ....
end

只要我用少量服务器执行脚本,CPU 就会达到 100%,但它会毫无问题地到达终点,但如果我将大约 20 个服务器作为参数传递,那么这个堆栈跟踪会导致 ruby​​ 崩溃

stack backtrace:: Failed to find value field (Selenium::WebDriver::Error::UnknownError)
        from    0:           0x4edb3c - backtrace::backtrace::trace::hc4bd56a2f176de7e
        from    1:           0x4edb72 - backtrace::capture::Backtrace::new::he3b2a15d39027c46
        from    2:           0x4409a1 - webdriver::error::WebDriverError::new::h81babdd86c977032
        from    3:           0x44b2c7 - geckodriver::marionette::MarionetteSession::response::ha4a2fbbdd9abe262
        from    4:           0x429f1a - <webdriver::server::Dispatcher<T, U>>::run::h2119c674d7b88193
        from    5:           0x4029b9 - std::sys_common::backtrace::__rust_begin_short_backtrace::h21d98a9ff86d4c25
        from    6:           0x40be65 - std::panicking::try::do_call::h5cff0c9b18cfdbba
        from    7:           0x5e6a6c - panic_unwind::__rust_maybe_catch_panic
        from                         at /checkout/src/libpanic_unwind/lib.rs:99
        from    8:           0x41eb22 - <F as alloc::boxed::FnBox<A>>::call_box::h413eb1d9d9f1c473
        from    9:           0x5df13b - alloc::boxed::{{impl}}::call_once<(),()>
        from                         at /checkout/src/liballoc/boxed.rs:692
        from                          - std::sys_common::thread::start_thread
        from                         at /checkout/src/libstd/sys_common/thread.rs:21
        from                          - std::sys::imp::thread::{{impl}}::new::thread_start
        from                         at /checkout/src/libstd/sys/unix/thread.rs:84
        from /home/antenore/.gem/ruby/2.4.0/gems/selenium-webdriver-3.8.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'

我的代码不太可接受,但我想知道它是否也是一个错误,以及您是否有任何建议来优化我所描述的循环。

我没有尝试在没有无头扩展的情况下运行脚本。

非常感谢!!!

系统:

Fedora release 26 (Twenty Six)

使用/安装的宝石:

watir (6.10.3)
watir-screenshot-stitch (0.6.5)
headless (2.3.1)

其他:

geckodriver 0.19.1 火狐 57.0.1

【问题讨论】:

  • 您是否尝试过为每个服务器单独运行脚本?它每次都在同一台服务器上崩溃吗?另外, response.rb:69 中的断言检查什么(来自您的堆栈跟踪)?您能否澄清一下“它使用表单搜索该服务器,它必须执行点击才能加载证据(一个 zip 文件)”这句话。 ?
  • 我认为 watir-webdriver 已被弃用,因此您的应用程序/脚本不应使用 required。
  • 此外,粗略查看其他具有类似错误消息的人表明,如果您能够将 geckodriver 和 Firefox 版本更新到最新可用版本:分别为 0.19.1 和 58.0.1,您可能会很幸运。祝你好运!
  • @tmow,你有能力使用 Chrome 尝试脚本吗?与 Watir 问题相比,它可能有助于确定是否存在浏览器问题。
  • @Sam 这是 Firefox 版本,我已经更新到 Firefox 58.0.1,我不再有问题了。我会为有兴趣的人添加答案。非常感谢大家!!

标签: ruby firefox watir geckodriver


【解决方案1】:

根据geckdriver developers的建议:

在 Firefox 55 及更高版本中得到最好的支持,虽然通常更多 最近的Firefox版本,他们拥有的体验更好 更多错误修复和功能。某些功能仅在 最新的 Firefox 版本,我们强烈建议使用 带有 geckodriver 的最新 Firefox Nightly。

对于最后一个 geckdriver 版本(我的情况),使用最新版本的 Firefox 总是更好。

主要原因,总是引用 hteir GitHub README

geckodriver 尚未完成功能。这意味着它不 但完全符合 WebDriver 标准或完全 与硒的兼容性。您可以跟踪实施状态 MDN 上最新的 Firefox Nightly。我们还跟踪已知的 我们的问题中的 Selenium、远程协议和规范问题 跟踪器。

事实上,在我的具体情况下,更新到 Fedora 26 上可用的最新版本 Firefox 58.0.1 解决了我的问题。

因此,作为愚蠢的规则,您必须尽可能同时使用最新版本的 geckdriver 和 Pirefox,或者至少遵循每个 release notes(如果有)的建议。

感谢@Sam @JustinKo 和@FrankSchmitt 的宝贵支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多