使用无头watir / firefox时无法访问重定向到自定义协议/方案

时间:2018-11-01 10:51:14

标签: ruby firefox watir headless xvfb

我正在为dropbox oauth序列进行一组集成测试,该测试将完成一系列302重定向,最后一个是自定义协议/方案。一切都可以在测试模拟的移动应用程序中按预期方式运行,而一切都在集成测试中正常运行。

测试环境运行在ubuntu服务器(无GUI)上,并且使用xvfb毫无头绪。

客观地,我实际上不需要遵循自定义协议URI,我只需要访问URI以确认内容符合预期即可。 我已经尝试了所有可以想到的从watir / selenium中访问包含自定义方案的URI的方法,但是我可以找到的所有参考都说底层的细节是设计故意隐藏的。

我也尝试了所有可以在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 :(得分:1)

经过多年的探索,事实证明,在mozilla网站和论坛上添加自定义方案的大多数文档已被弃用,没有什么新的替代方法。咕rr。

通过反复试验,我发现网络驱动程序使用的模型配置文件不需要完整,缺少的任何内容都会从默认配置文件中提取。因此,所需要做的就是一个包含自定义方案(仅此一个)的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