Сбой Watir, если я повторяю несколько раз на одних и тех же страницах
Я автоматизировал загрузку некоторых доказательств в интрасеть соответствия, где я работаю (я не могу предоставить подробности) с 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
Как только я выполняю сценарий с несколькими серверами, загрузка процессора достигает 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 ответ
По совету разработчиков Geckdriver:
Лучше всего поддерживать Firefox 55 и выше, хотя, как правило, более поздняя версия Firefox улучшает работу, поскольку в ней больше исправлений и функций. Некоторые функции будут доступны только в самых последних версиях Firefox, и мы настоятельно рекомендуем использовать последнюю версию Firefox Nightly с geckodriver.
С последней версией geckdriver (в моем случае) всегда лучше использовать последнюю версию Firefox.
Основная причина этого, всегда цитируя hitir GitHub README
geckodriver еще не завершен. Это означает, что он еще не обеспечивает полного соответствия стандарту WebDriver или полной совместимости с Selenium. Вы можете отслеживать статус реализации последней версии Firefox Nightly на MDN. Мы также отслеживаем известные проблемы Selenium, удаленного протокола и спецификации в нашем трекере.
Фактически, в моем конкретном случае, обновление до Firefox 58.0.1, последней версии, доступной в Fedora 26, решило мою проблему.
Поэтому, как правило, глупо, вы всегда должны использовать как последнюю версию geckdriver, так и Pirefox, когда это возможно, или, по крайней мере, следовать рекомендациям каждого примечания к выпуску (если есть).
Спасибо @Sam @JustinKo и @FrankSchmitt за их неоценимую поддержку.