在 Capybara-Webkit 中显示 @font-face 字体

Posted

技术标签:

【中文标题】在 Capybara-Webkit 中显示 @font-face 字体【英文标题】:Display @font-face Fonts in Capybara-Webkit 【发布时间】:2013-01-29 15:02:31 【问题描述】:

当我使用 capybara-webkit 测试我的网站并截屏时,CSS 中的 @font-face 声明被忽略。

这尤其糟糕,因为我使用的是 FontAwesome,因此页面在真实浏览器中的显示方式会有很大差异。

如何复现:https://gist.github.com/anonymous/4948827

输出:http://i.imgur.com/5lsrleY.jpg

有没有办法解决这个问题?

【问题讨论】:

这个问题成功了吗? 【参考方案1】:

根据构建capybara-webkit 所针对的qt 版本,webkit 需要将非本地 localhost 的 URL 列入白名单。这包括对外部资产(如字体)的元引用。

要在全局范围内实现这一点,请将其添加到 rspec 配置块中的 spec_helper.rb:

config.before(:each) do
  page.driver.allow_url("the-domain-name.com")
end

如果你已经有一个 before :each ,就把它扔进去。 allow_url 也接受字符串数组。

我已经在您的要点中对此发表了评论。

【讨论】:

我认为这个白名单已经存在了一段时间,但 qt 吃掉了警告。然而,qt5 显示了它们,这也是我偶然发现这个解决方案的原因。【参考方案2】:

一些研究表明,完全可以在 Capybara-Webkit 中呈现自定义字体,与使用 PhantomJS 相同。此PhantomJS Forum Post 标识故障问题。快速总结:

    SVG 字体效果最好。 OTF 字体往往不起作用。 应该使用 Qt5 修复它,因此请检查您构建的 Qt 版本。

【讨论】:

以上是关于在 Capybara-Webkit 中显示 @font-face 字体的主要内容,如果未能解决你的问题,请参考以下文章

在 capybara-webkit 中禁用声音

如何使用 capybara-webkit 获取响应头和时间

Capybara-Webkit:缺少 js/React 并且找不到变量:WeakMap

使用 RSpec + capybara-webkit 检查 JS 框是不是存在

$.ajax 删除请求未在 capybara-webkit 中发送数据参数

在 capybara-webkit 中替代 find_field('doc-name').native.send_keys(:tab)