- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 rspec 执行的每个 poltergeist 测试中,如果我使用以下命令创建新 session :
Capybara.session_name="some_session_name"
phantomjs 实例作为子进程启动,并且在测试结束之前永远不会退出,从而导致我的构建服务器上出现 OOM。
我认为这是由于未能调用 driver.quit,如 readme of Poltergeist 中所述。 :
If you run a few capybara sessions manually please make sure you've called session.driver.quit when you don't need session anymore. Forgetting about this causes memory leakage and your system's resources can be exhausted earlier than you may expect.
但是,我在测试的 after
block 中调用 page.driver.quit
。
下面是我的 block 后代码。 $adhoc_sessions
是我每次设置 Capybara.session_name
时填充的全局变量,其值与 Capybara.session_name
上设置的值匹配。
config.after(:each) do
if example.metadata[:js]
$adhoc_sessions.each do |session_name|
Capybara.using_session( session_name ) do
page.driver.quit
end
end
$adhoc_sessions.clear
end
关于我可以在这里做得更好的任何建议吗?我是否未能调用某些清理命令?
最佳答案
我找到了一个有两个限制的解决方案:
重新创建 TOO MANY OPEN FILES 错误的方法 - 不要使用此!!
# you have to do quite a few test runs to cause the open files error
config.append_after(:each) do
session_pool = Capybara.instance_variable_get("@session_pool")
session_pool.each do | key, value |
value.driver.quit
end
session_pool.clear
end
我相信这是一个真正的吵闹鬼错误,但我不在乎......这就是为什么......在运行上面的代码时,我注意到创建一个吵闹鬼 session 是一个明显缓慢且资源密集型的操作。因此,我决定宁愿拥有一个永远不会消失的 session 池……就像 Capybara 的设计方式一样。
这种方法的唯一问题是像我一样使用 Capybara.session_name ,即在每个测试的基础上提出任意测试名称。也许在一个测试中我希望每个 session_name 与用户的数据库 ID 相同。或者我可能会想出 5 个在测试中使用的常量,并为不同的测试使用 5 个不同的常量。换句话说,我可能在我的测试套件中使用数百个 session_name,但对于任何给定的测试,我最多只有少数几个 session 。因此,一个好的解决方案重用吵闹 session ,但让我在每次测试运行时使用任意 session 名称。
spec/utilities.rb
# holds a single test's session name's, mapped to pooled session names
$capybara_session_mapper = {}
# called after each test,
# to make sure each test run has it's own map of session names
def reset_session_mapper
$capybara_session_mapper.clear
end
# manages the mapped session name
def mapped_session_name(session_name)
return :default if session_name == :default # special treatment for the built-in session
$capybara_session_mapper[session_name] ||= $capybara_session_mapper.length
end
# in place of ever using Capybara.session_name directly,
# this utility is used to handle the mapping of session names in a way across all tests runs
def in_client(name)
Capybara.session_name = mapped_session_name(session_name)
yield
end
在 *spec_helper.rb* 中:
config.after(:each) do
Capybara.reset_sessions!
reset_session_mapper
end
直接使用 in_client 而不是 Capybara.session_name 的示例测试:
it "can't see a private thing until it is made public" do
in_client(user1.id) do
visit '/some/private/thing'
expect(page).to have_selector('#private-notice')
end
in_client(user2.id) do
visit '/expose/some/private/thing'
end
in_client(user1.id) do
visit '/some/private/thing`
expect(page).to have_selector('#private-content')
end
end
关于poltergeist - 使用 Poltergeist,Phantom JS 实例在每次 rspec 运行期间都不会退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20107326/
如果我使用 phantom.js 进行网页抓取,单击一些按钮和链接,那么终止程序最方便的方法是什么? http://phantomjs.org/api/webpage/method/close.htm
我正在尝试使用 phantom.js 编写一个网络蜘蛛。但是我收到了很多错误消息,我不知道为什么。我的代码如下所示: 使用 Nightmare.js: var Nightmare = require(
刚刚学习使用phantomjs,根据网上帖子自己手动改了一个延时截图功能,发现延时功能就是不能执行,最后一点点排查出了问题。 看代码: ?
所以我有一个带有 nextjs 的 React 应用程序,当用户使用 Phantom 钱包扩展程序并切换帐户时,我需要获取一个事件触发器。我在他们的文档中找不到任何相关内容:https://docs.
API 文档说 This reference type differs from the others in that it isn't meant to be used to access the
我正在尝试使用Phantom JS登录一个站点,以便可以保持供应商价格的最高水平。 输入了用户名和密码,但没有按下登录按钮。 如果登录按钮是而不是,则.click()应该可以工作,但是我找不到按的方法
我正在运行 AngularJS 的设置AJAX 应用程序,并使用 PhantomJS和 Angular-seo库,以便为爬虫提供实际标记而不是 JS 代码。 不幸的是,我收到一条错误消息: 此附件的隐
我有一个 Phantom JS 脚本,用于监视一些外部页面。基本上它只是从这个页面获取状态,如下所示( typescript 代码): const status: string = await pag
我设法使 SVN 存储库陷入不良状态。我已经移动了一个目录,但现在无法将其提交到新位置。 就svn status而言,目录未知(目录名称为type)。 $ svn status? type
我在命令行中输入以下命令:tf工作区,它告诉我计算机上没有工作区。然后我在服务器上尝试相同的命令,什么也没有。因此,我进入 Visual Studio 2010 并创建一个新工作区,并尝试将 TFS
这个信息图有更多问题。好像有幻影出现在轮播的末尾。有谁知道这是怎么出现的? http://weaver-wp.weavertest.com/radiation-infographic/ 干杯,戴夫 最
我有一个 UWP 应用程序,该应用程序给我幻象的 XAML 编译器错误。 在此示例中,我在 Win2D 控件上遇到错误: 控件的命名空间是: xmlns:win2D="usin
我正在使用 Jasmine 对 Angular 应用程序进行单元测试。在 Chrome 上一切正常,直到我开始使用 PhantomJs 进行 headless 浏览器测试或在控制台上测试输出。 2天后
我正在尝试使用 Phantom.JS 在此页面上执行一些页面自动化:https://reserve.apple.com/GB/en_GB/reserve/iPhone 我知道如何使用 document
这是 Scala“Phantom Type”演示的示例,显示 compile-time checking of Rocket Launch configuration : object RocketM
我似乎在 Postgres 中有某种幻影表。 假设我执行以下操作: select * from information_schema.tables where table_schema = 'publ
是否可以使用 Phantom.js 获取警告框内的文本? var page = require("webpage").create() , assert = require("assert"); pa
我正在尝试创建一个列表,其中每一行都有一个指示该行的数字(例如,“1”代表第一行,“2”代表第二行,等等),一个或多个图标(例如,删除、编辑等)紧接在号码的右侧,然后是后面的文本 block 。参见
请帮助我在我的 Windows 8 PC 上配置 phantom.js。 我是从http://phantomjs.org/download.html下载的 它给了我一个 zip 文件,其中有 1 个
我对 PhantomJS 和一般编程都很陌生,所以请耐心等待。我正在尝试编写代码来登录我的亚马逊帐户,并将送货地址添加到我的地址簿中。我正在使用的代码在这里: var steps=[]; var lo
我是一名优秀的程序员,十分优秀!