Перенаправление на пользовательский протокол / схему недоступно при использовании безголового watir / firefox - PullRequest
0 голосов
/ 01 ноября 2018

Я работаю над набором интеграционных тестов для последовательности oauth dropbox, которая заканчивается серией из 302 перенаправлений, последним из которых является пользовательский протокол / схема. В мобильном приложении все работает так, как ожидалось, что имитирует тестирование, и все, что не работает в интеграционных тестах.

Среда тестирования работает на сервере Ubuntu (без графического интерфейса) и не использует xvfb.

Объективно, мне на самом деле не нужно следовать пользовательскому URI протокола, мне просто нужно получить доступ к URI, чтобы подтвердить, что содержимое соответствует ожиданиям. Я перепробовал все, что мог придумать, чтобы получить доступ к URI, содержащему пользовательскую схему, изнутри watir / selenium, но все ссылки, которые я могу найти, говорят о том, что основная деталь намеренно скрыта замыслом.

Я также попробовал все варианты, которые я могу найти для создания собственного обработчика протокола в профиле Firefox, но, что бы ни случилось, скрипт не вызывается.

В журналах watir / selenium не осталось ничего полезного.

Есть мысли?

Фрагмент пользовательского протокола:

# initialise headless
headless = Headless.new( reuse: false )
headless.start

# initialise profile
profile = Selenium::WebDriver::Firefox::Profile.new
profile[ 'general.useragent.override' ] = 'agent'
profile[ 'network.protocol-handler.app.biscuit' ] = '/usr/bin/biscuit'
profile[ 'network.protocol-handler.external.biscuit' ] = true
profile[ 'network.protocol-handler.expose.biscuit' ] = true
profile[ 'network.protocol-handler.warn-external.biscuit' ] = false

# initialise client
client = Selenium::WebDriver::Remote::Http::Persistent.new

# initialise browser
browser = Watir::Browser.new :firefox, profile: profile, accept_insecure_certs: true, http_client: client

# run dropbox authentication cycle

# cleanup
browser.close
headless.destroy

1 Ответ

0 голосов
/ 05 ноября 2018

После долгих лет поисков выясняется, что большая часть документации по добавлению пользовательских схем на сайт и форумы mozilla устарела, и нет ничего нового, что могло бы заменить ее. Хмм.

В процессе проб и ошибок я обнаружил, что профиль модели, используемый веб-драйвером, необязательно должен быть полным, и все, что отсутствует, извлекается из профиля по умолчанию. Поэтому все, что требуется, - это файл handlers.json, содержащий пользовательские схемы и не более.

Фрагмент для демонстрации:

# create a temporary model profile
profilePath = '/tmp/modelProfile'
FileUtils.mkpath profilePath
File.chmod( 0700, profilePath )
FileUtils.chown 0, 0, profilePath
open( profilePath + '/handlers.json', 'w' ) { |file| file.write '{ "defaultHandlersVersion": { "en-US": 4 }, "schemes": { "biscuit": { "action": 2, "handlers": [ { "name": "biscuit", "uriTemplate": "https://www.biscuit.me?url=%s" } ] } } }' }

# create profile
profile = Selenium::WebDriver::Firefox::Profile.new( '/tmp/modelProfile' ) 

# initialise browser
browser = Watir::Browser.new :firefox, profile: profile, accept_insecure_certs: true
...