一尘不染

使用Capybara + Selenium时禁用JavaScript

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。在测试过程中弹出浏览器窗口并用暂停时binding.pry,我可以肯定地单击我知道需要JavaScript的项目并看到它们正常工作。

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

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

谢谢!


阅读 265

收藏
2020-06-26

共1个答案

一尘不染

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

2020-06-26