- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 Watir 正确设置了 BrowserMob 代理,它正在捕获流量并保存 HAR 文件;但是,它没有做的是它没有持续捕获流量。所以以下是我要实现的目标:
然而,我注意到的是,它遵循了上述所有步骤,但在第 3 步,代理甚至在该页面上进行调用之前就停止捕获流量。返回的 HAR 中没有该调用,因此测试甚至在它完成工作之前就失败了。以下是代码的样子。
class BMP
attr_accessor :server, :proxy, :net_har, :sel_proxy
def initialize
bm_path = File.path(Support::Paths.cucumber_root + "/browsermob-
proxy-2.1.4/bin/browsermob-proxy")
@server = BrowserMob::Proxy::Server.new(bm_path, {:port => 9999,
:log => false, :use_little_proxy => true, :timeout => 100})
@server.start
@proxy = @server.create_proxy
@sel_proxy = @proxy.selenium_proxy
@proxy.timeouts(:read => 50000, :request => 50000, :dns_cache =>
50000)
@net_har = @proxy.new_har("new_har", :capture_binary_content =>
true, :capture_headers => true, :capture_content => true)
end
def fetch_har_entries(target_url)
har_logs = File.join(Support::Paths.har_logs, "har_file # .
{Time.now.strftime("%m%d%y_%H%M%S")} .har")
@net_har.save_to har_logs
index = 0
while (@net_har.entries.count > index) do
if @net_har.entries[index].request.url.include?(target_url) &&
entry.request.method.eql?("GET")
logs = JSON.parse(entry.response.content.text) if not
entry.response.content.text.nil?
har_logs = File.join(Support::Paths.har_logs, "json_file_# .
{Time.now.strftime("%m%d%y_%H%M%S")}.json")
File.open(har_logs, "w") do |json|
json.write(logs)
end
break
end
index += 1
end
end
end
在我的测试文件中有以下内容
Then("I navigate to the homepage") do
visit(HomePage) do |page|
page.element.click
end
end
And("I should wait for event to capture traffic") do
visit(SecondPage) do |page|
page.wait_until{page.element2.present?)
BMP.fetch_har_entries("target/url")
end
end
我错过了什么导致代理无法捕获全部流量?
最佳答案
万一有人通过谷歌搜索来到这里,我想出了如何自己解决这个问题(感谢 stackoverflow 社区,大声笑)。所以为了解决这个问题,我使用了一个名为 eventually
方法的自定义 retriable loop
。
logs = nil
eventually(timeout: 110, interval: 1) do
@net_har = @proxy.new_har("har", capture_binary_content: true, capture_headers: true, capture_content: true)
@net_har.entries.each do |entry|
begin
break if @net_har.entries.index entry == @net_har.entries.count
next unless entry.request.url.include?(target_url) &&
entry.request.post_data.text.include?(target_body_text)
logs = entry.request.post_data.text
break
rescue TypeError
fail("Response body for the network call came back empty")
end
end
raise EOFError if logs_hash.nil?
end
logs
end
基本上我假设发生的事情是 BMP 只会缓存或捕获 30 秒的 har 日志,如果我的网络事件在这 30 秒内没有发生,我就是 SOL。所以上面的代码正在做的是等待 logs
变量不为 nil,如果是,它引发一个 EOFError
并返回到循环初始化har
再次查找网络调用。它会一直这样做,直到找到调用或 110 秒结束。以下是我正在使用的 eventually
方法
def eventually(options = {})
timeout = options[:timeout] || 30
interval = options[:interval] || 0.1
time_limit = Time.now + timeout
loop do
begin
yield
rescue EOFError => error
end
return if error.nil?
raise error if Time.now >= time_limit
sleep interval
end
end
关于ruby - Browsermob Proxy + Watir 不连续捕获流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53644475/
这是我正在使用的 Watir 代码: require 'watir-classic' browser = Watir::IE.new browser.link(:class, "Wizardbutto
在我们的应用程序中,我们有一些具有以下属性的输入标签: 我已经尝试了大多数 watir 输入法,但没有任何方法可以识别这个对象。任何人都可以为我照亮一点吗? 我的 watir 版本是 1.6.5。
我能够在下拉列表中设置一个选项,但随后我收到一条错误消息。我找到了一个会返回相同错误的在线网站: http://www.100candles.com/floating_candles.htm irb(
希望有人可以帮助我解决我在 Cucumber/Watir 中遇到的转义字符问题。 我有自动化测试设置。当我执行搜索时,我用来验证搜索是否返回正确结果的断言之一是检查页面中的文本。所以我的代码看起来像这
在文本字段中输入文本后,我需要自动执行键盘上的“Enter”键操作。 我试过 @browser.send_keys :enter但这并没有起到作用。也试过@browser.text_field(:na
我想知道 watir-webdriver 是否能够记录任何控制台错误的输出? 这相当于在浏览器中手动打开控制台并在页面加载时观察 JS 错误。我可以通过 watir-webdriver 捕获它并登录/
我想从以下值中找到并单击 Line Lo 值。以下 li 有超过 100 条记录具有相同的类名。如何找到 Line Lo 并单击该值。
有一个repository of tests对于 Mozilla 插件站点,尽管它是使用 Selenium 编写的。我想知道是否有 Watir 可用的真实示例,以便我可以看到专业人士如何实现该框架?
我在处理以下情况时遇到问题。 我正在编写测试脚本,它将让我使用谷歌浏览器登录到系统。 我正在从 excel 中读取数据。 第一组数据的用户名/密码组合不正确。 场景是当输入的密码不正确时,弹出窗口显示
在下面的 html 中 Name: 12121 如何使用 Watir 访问“12121”文本? 最佳答案 要获取潜台词 12121,请使用正则表达式。 gsub 执行搜索和替换操作。它将搜索所有非
我有以下div ... Test 我想提出一个 Watir 查询来测试它我想出了以下(我只需要第一个)... def item_present? # @
我想将一个元素拖放到另一个元素的位置,从 watir-webdriver 脚本中触发。 “拖放”是指拿起一个可拖动元素并将其释放到另一个元素上。 “可能”是指可以从 watir-webdriver 脚
使用 watir-webdriver 时,如何将控制组合键发送到元素? 目前我可以使用以下代码向元素发送一个字符串; $browser.frame(:id,"ws-txt-editor").div(:
我们的网络应用程序有一些事件代码来“格式化”粘贴到字段中的任何文本,这样任何 HTML 样式都不会破坏我们的数据。 预加载浏览器剪贴板以便我可以测试粘贴到输入字段的好方法是什么? 有没有什么方法可以通
require 'watir' ie = Watir::Browser.new ie.goto "http://www.wallpapers.com/windows/Wallpapers/Anim
我有一部分类似于以下内容的 HTML: Text Goes Here ... rest of table 没有 ID、没有标题、没有任何类型的描述符来轻松识别包含文本的 div。 当页面上发生
是否可以将 watir-webdriver 附加到已打开的浏览器窗口? 最佳答案 Watir-webdriver 建立在 selenium-webdriver 之上,目前这是一个待定的功能。 见:ht
我正在使用 Watir 来自动测试 web 应用程序。 在其中一个页面中,我有类似 htis 的内容 但是我能够识别 HTML 元素来访问它。 我需要访问 id="1"value="TIMESH
嗨,出于 SEO 的目的,我们需要访问 html 页面上的 META 标签。但是 Watir 不支持 META 标签。还有其他方法可以访问不受支持的 HTML 标签吗? 任何帮助表示赞赏。 嗨,我找到
我需要检查某个列是否显示在表中。 每列都有一个带有唯一 ID 的 TH 标题。 检查表中 TH 元素是否存在的最佳方法是什么? 这是表格代码的示例。 Nam
我是一名优秀的程序员,十分优秀!