Наше приложение после определенной транзакции должно войти в стороннюю систему и ввести некоторые данные. Сделал системный тест с Capybara и селеном, и это прекрасно работает, однако это при запуске его на тесте. Я хотел бы создать класс / службу, которая будет работать в ActiveJob, чтобы делать то же самое, поэтому после сохранения транзакции я бы хотел вызвать ActiveJob.perform_later (params), и параметры должны передаваться в класс external_system_integration. и запустить без головы, чтобы войти на сторонний сайт и ввести данные, полученные в параметрах.
Как это сделать?
Мой класс
require 'capybara/dsl'
require 'capybara/rspec'
require "selenium/webdriver"
class OrderDeskService
Capybara.default_driver = :webkit
include Capybara::DSL
def self.login
Capybara.register_driver :chrome do |app|
profile = Selenium::WebDriver::Chrome::Profile.new
profile["download.default_directory"] = DOWNLOAD_PATH
Capybara::Selenium::Driver.new(app, :browser => :chrome, :profile => profile)
end
Capybara.configure do |config|
config.run_server = false
config.app_host = 'https://app.orderdesk.me'
end
visit '/login'
sleep 10
end
end
РЕДАКТИРОВАТЬ после обратной связи:
Capybara.configure do |c|
c.run_server = false
c.app_host = 'https://app.orderdesk.me'
end
#Configure
Capybara.register_driver :selenium do |app|
profile = Selenium::WebDriver::Chrome::Profile.new
profile["download.default_directory"] = DOWNLOAD_PATH
Capybara::Selenium::Driver.new(app, :browser => :chrome, :profile => profile)
end
#headless
Capybara.register_driver :headless_chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: {
args: %w[headless disable-gpu enable-features=NetworkService,NetworkServiceInProcess]
}
)
Capybara::Selenium::Driver.new app,
browser: :chrome,
desired_capabilities: capabilities
end
#make it thread safe
Capybara.threadsafe = true
Capybara.default_driver = Capybara.javascript_driver = :headless_chrome
class OrderDeskService
include Capybara::DSL
def self.login
session = Capybara::Session.new(:selenium)
session.visit '/login'
sleep 3
session.quit
end
end
Попытка запустить в режиме без головы, но он по-прежнему открывает браузер Chrome.