【发布时间】: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