【问题标题】:Disabling JavaScript when using Capybara + Selenium使用 Capybara + Selenium 时禁用 JavaScript
【发布时间】:2016-06-12 01:25:05
【问题描述】:

我有一个应用程序被设计为在禁用 JavaScript 时仍然可以运行,所以我想编写一些规范来涵盖这些情况。

我正在将 Selenium (Firefox) 与 Capybara 一起使用,并且我正在注册一个禁用 JavaScript 的新驱动程序(通过 Selenium 的 javascript.enabled 属性)

# spec/rails_helper.rb
Capybara.configure do |config|
  config.ignore_hidden_elements = true
  config.default_driver = :selenium
end

Capybara.register_driver :disable_js do |app|
  profile = Selenium::WebDriver::Firefox::Profile.new
  profile["javascript.enabled"] = false
  Capybara::Selenium::Driver.new(app, profile: profile)
end


# spec/features/siging_in_spec.rb
context "JavaScript disabled", driver: :disable_js do
  it "user can still sign in" do
    # ...
    # ...
  end
end

功能规范未能真正禁用 JavaScript。当在测试期间弹出浏览器窗口并且我用binding.pry 暂停它时,我绝对可以单击我知道需要 JavaScript 的项目并查看它们是否正常工作。

旁注:如果我真的去我的 Firefox 设置并禁用 JavaScript,则测试通过。所以它似乎继承了我在浏览器中设置的任何配置,而不是实际使用注册驱动程序时指定的配置。

这是正确的方法,还是我错过了什么?

谢谢!

【问题讨论】:

标签: ruby-on-rails-3 selenium selenium-webdriver rspec capybara


【解决方案1】:

注册驱动程序时无法更改 javascript.enabled 设置,因为 selenium 将其冻结为 true - https://github.com/SeleniumHQ/selenium/blob/master/javascript/firefox-driver/webdriver.json#L35 - 这样做是因为尝试使用 selenium 和 firefox 并禁用 JS https://github.com/SeleniumHQ/selenium/issues/635 - 并且是不太可能改变。你能用 rack_test 驱动程序运行那些特定的测试吗?还是没有提供足够的功能?

【讨论】:

  • 感谢您发现问题!我想知道为什么它一直覆盖我的设置。至于机架测试 - 我测试桌面和移动分辨率以进行响应测试(因此启用/禁用 JS 和桌面/移动的所有 4 种组合)。对于在移动分辨率上禁用 JS 的特定情况,rack-test 是不够的,因为它没有窗口宽度的概念,因为它只是呈现 HTML。我会考虑 Poltergeist 或 Capybara-webkit,但我相信这两个在禁用 JS 方面也有类似的障碍
【解决方案2】:

不幸的是,设置profile["javascript.enabled"] = false no longer works

另一种方法是安装禁用 JavaScript 的 Firefox 插件。这适用于 Firefox 45 ESR、selenium-webdriver (2.53.4) 和 capybara (2.8.1):

profile.add_extension(File.expand_path('../quickjava-2.1.0-fx.xpi', __FILE__))

# Configure the extension to disable JavaScript by default.
profile['extensions.thatoneguydotnet.QuickJava.startupStatus.JavaScript'] = 2

# Disable loading the extension's first-run tab.
profile['extensions.thatoneguydotnet.QuickJava.curVersion'] = '2.1.0'

我评估了几个不同的插件,包括 NoScript 和 QuickJs,但决定找到一个可以默认禁用 JavaScript 的非常简单的插件——QuickJava 成功了。您可以在此处下载 XPI 文件(使用 Firefox,右键单击并另存为,而不是直接安装):https://addons.mozilla.org/en-US/firefox/addon/quickjava/versions/

你也可以在源码中看到all of the addon's pref settings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2017-10-14
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多