我已经自动将一些证据上传到合规内部网,我在那里工作(我无法提供详细信息)和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
答案 0 :(得分:2)
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的宝贵支持。