使用 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。
我有一个应用程序设计为在 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。