为什么 Browsermob-Proxy-rb w/Selenium 无法任意记录 HTTP 流量?
Why is Browsermob-Proxy-rb w/ Selenium failing to record HTTP traffic arbitrarily?
我一直在使用 Browsermob Proxy
,通过当前版本的 browsermob-proxy.rb gem,记录几个 RSpec
测试。
不幸的是,它似乎随机无法记录流量。在一些测试 运行s 中,流量被完美记录。在其他情况下,在不对代码或环境进行任何修改的情况下,它输出的 har 文件几乎是空的。测试本身毫无问题地通过了,但没有任何记录。总是生成 har 文件。
我知道我的所有代码都是 运行,通过我的日志。所以我不确定问题到底出在哪里。我在下面包含了一些相关代码:
Har 保存逻辑(这在测试结束时由 after(:all)
块调用)
def save_har(test_name,har_dir)
if @proxy.nil?
log_proxy_helper "Proxy instance already stopped, cannot save 'har' file"
else
log_proxy_helper "Saving har to #{har_dir}"
filename = ("#{test_name}.har").gsub(' ','_')
path = File.expand_path(File.join(har_dir , filename))
if path.match(/^C:\//)
path.gsub!(/\//, "\")
end
begin
@proxy.har.save_to path
rescue Exception => e
log_proxy_helper "Error: #{e}"
end
log_proxy_helper "Saved har to #{path}"
end
end
代理创建逻辑(在与上述相同的文件和上下文中)
def start_proxy
begin
log_proxy_helper "Starting proxy using port #{proxy_port}"
logs_path = 'logs/'
logs_path = ENV['WORKSPACE'] + '/logs/' if ENV['WORKSPACE']
@proxy_server = BrowserMob::Proxy::Server.new(browsermob_proxy_path,{:port => 9090,:log => false,:logs_path => logs_path, :use_little_proxy => false, :timeout => 30})
begin
@proxy_server.start
rescue Exception => e
log_proxy_helper "Error: #{e}"
end
@proxy = @proxy_server.create_proxy proxy_port
@proxy.new_har(:capture_binary_content => true)
log_proxy_helper "Server Started"
end if check_proxy_configured 'Can\'t start proxy'
end
生成的几乎为空的 har 文件之一的示例:
{
"log": {
"version": "1.2",
"creator": {
"name": "BrowserMob Proxy",
"version": "2.1.0-beta-3-littleproxy",
"comment": ""
},
"pages": [
{
"id": "Page 0",
"startedDateTime": "2015-11-17T16:18:16.695-05:00",
"title": "Page 0",
"pageTimings": {
"onLoad": 2916,
"comment": ""
},
"comment": ""
}
],
"entries": [],
"comment": ""
}
}
有什么想法吗?
编辑:
经过更多测试后,我发现这只发生在 Internet Explorer 上; Firefox 和 Chrome 正确记录
万一有人搜索发现这个,原来是我在 Internet Explorer Webdriver 实例化中错误地设置了代理。一个简单的错误导致了很多混乱。
我一直在使用 Browsermob Proxy
,通过当前版本的 browsermob-proxy.rb gem,记录几个 RSpec
测试。
不幸的是,它似乎随机无法记录流量。在一些测试 运行s 中,流量被完美记录。在其他情况下,在不对代码或环境进行任何修改的情况下,它输出的 har 文件几乎是空的。测试本身毫无问题地通过了,但没有任何记录。总是生成 har 文件。
我知道我的所有代码都是 运行,通过我的日志。所以我不确定问题到底出在哪里。我在下面包含了一些相关代码:
Har 保存逻辑(这在测试结束时由 after(:all)
块调用)
def save_har(test_name,har_dir)
if @proxy.nil?
log_proxy_helper "Proxy instance already stopped, cannot save 'har' file"
else
log_proxy_helper "Saving har to #{har_dir}"
filename = ("#{test_name}.har").gsub(' ','_')
path = File.expand_path(File.join(har_dir , filename))
if path.match(/^C:\//)
path.gsub!(/\//, "\")
end
begin
@proxy.har.save_to path
rescue Exception => e
log_proxy_helper "Error: #{e}"
end
log_proxy_helper "Saved har to #{path}"
end
end
代理创建逻辑(在与上述相同的文件和上下文中)
def start_proxy
begin
log_proxy_helper "Starting proxy using port #{proxy_port}"
logs_path = 'logs/'
logs_path = ENV['WORKSPACE'] + '/logs/' if ENV['WORKSPACE']
@proxy_server = BrowserMob::Proxy::Server.new(browsermob_proxy_path,{:port => 9090,:log => false,:logs_path => logs_path, :use_little_proxy => false, :timeout => 30})
begin
@proxy_server.start
rescue Exception => e
log_proxy_helper "Error: #{e}"
end
@proxy = @proxy_server.create_proxy proxy_port
@proxy.new_har(:capture_binary_content => true)
log_proxy_helper "Server Started"
end if check_proxy_configured 'Can\'t start proxy'
end
生成的几乎为空的 har 文件之一的示例:
{
"log": {
"version": "1.2",
"creator": {
"name": "BrowserMob Proxy",
"version": "2.1.0-beta-3-littleproxy",
"comment": ""
},
"pages": [
{
"id": "Page 0",
"startedDateTime": "2015-11-17T16:18:16.695-05:00",
"title": "Page 0",
"pageTimings": {
"onLoad": 2916,
"comment": ""
},
"comment": ""
}
],
"entries": [],
"comment": ""
}
}
有什么想法吗?
编辑: 经过更多测试后,我发现这只发生在 Internet Explorer 上; Firefox 和 Chrome 正确记录
万一有人搜索发现这个,原来是我在 Internet Explorer Webdriver 实例化中错误地设置了代理。一个简单的错误导致了很多混乱。