使用 Capybara + Selenium 时禁用 JavaScript

Disabling JavaScript when using Capybara + Selenium

我有一个应用程序设计为在 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。当浏览器 window 在测试期间弹出并且我用 binding.pry 暂停它时,我绝对可以点击我知道需要 JavaScript 的项目并查看它们的工作情况。

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

这是正确的方法吗,还是我遗漏了什么?

谢谢!

注册驱动程序时无法更改 javascript.enabled 设置,因为 selenium 将其冻结在 true - https://github.com/SeleniumHQ/selenium/blob/master/javascript/firefox-driver/webdriver.json#L35 - This was done because of issues with trying to use selenium and firefox with JS disabled https://github.com/SeleniumHQ/selenium/issues/635 - 并且不太可能更改。您可以 运行 使用 rack_test 驱动程序进行那些特定的测试吗?还是它没有提供足够的功能?

不幸的是,设置 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 did the trick. You can download the XPI file here (use Firefox, right click and Save As instead of installing directly): https://addons.mozilla.org/en-US/firefox/addon/quickjava/versions/

您还可以在来源中查看all of the addon's pref settings