Почему браузер закрывается автоматически после выполнения задач, когда я использую селен с Ruby? - PullRequest
1 голос
/ 23 января 2020

Я начинаю изучать Ruby вместе с селеном и огурцом: я работаю в Ubuntu и использую Firefox в качестве браузера Ubuntu: Описание: Ubuntu 18.04.3 LTS Release: 18.04

Firefox версия: 72.0.1 selenium-webdriver версия: 3.142.7 Ruby версия: 2.5.1p57

Я начал с небольшого простого теста:

require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get "http://google.com"
element = driver.find_element(name: "q")
element.send_keys "Cheese!"
element.submit

После «Сыр» отправляется на панель поиска, браузер немедленно закрывается.

Я хочу оставить его открытым, что я могу сделать? Я нашел это предлагаемое решение:

caps = Selenium::WebDriver::Remote::Capabilities.firefox(:firefox_options => {detach: true})
driver = Selenium::WebDriver.for :firefox, desired_capabilities: caps

Но когда я добавляю его в свой код, я получаю это предупреждение об устаревании:

2020-01-23 10:12:35 WARN Selenium [DEPRECATION] :firefox_options capabilitiy is deprecated. Use Selenium::WebDriver::Firefox::Options instead.

Я пытался использовать Options, но мне не удалось, потому что я Должно быть, сделал это неправильно. Вот что я сделал

opt = Selenium::WebDriver::Firefox::Options.new
opt.add_preference("detach","true")
caps = Selenium::WebDriver::Remote::Capabilities.firefox(opt)
driver = Selenium::WebDriver.for :firefox, desired_capabilities: caps

Я получаю следующую ошибку:

`firefox': undefined method `key?' for #<Selenium::WebDriver::Firefox::Options:0x000055e1a6c58158> (NoMethodError)

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Проверьте вашу IDE или используемые вами пакеты. Многие из них автоматически встраиваются в закрытые скрипты. Это вероятная проблема, с которой вы столкнетесь.

Если вы запустите только скрипт ruby со своего терминала, он не закроется. Попробуй диеты. Такие предметы, как капибара / огурец, могут иметь зарегистрированные крючки, которые могут повлиять на это.

0 голосов
/ 23 января 2020

Я почти уверен, что этого не произойдет для firefox, и я взял ваш код и выполнил, и он не закрывается. Это происходит только для Chrome. Если вы используете Chrome, напишите следующий код.

caps = Selenium::WebDriver::Remote::Capabilities.chrome("goog:chromeOptions" => {detach: true})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps
...