如果我在同一页面上多次循环,Watir会崩溃

时间:2018-02-07 11:35:09

标签: ruby firefox watir geckodriver

我已经自动将一些证据上传到合规内部网,我在那里工作(我无法提供详细信息)和watir。

我做了一些简单的操作,就像打开一个到该内部网的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    Firefox 57.0.1

1 个答案:

答案 0 :(得分:2)

根据geckdriver developers

的建议
  

Firefox 55及更高版本支持最佳,但通常情况下更多   最近的Firefox版本,他们的体验越好   更多错误修复和功能。部分功能仅适用于   最新的Firefox版本,我们强烈建议使用   最新的Firefox Nightly with geckodriver。

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

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

  

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

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

因此,作为哑巴的规则,您必须始终尽可能使用最新版本的geckdriver和Pirefox,或者至少遵循每个release notes(如果有)的重新命名。

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