I am still wondering why the decision was made not to add this RSpec 
functionality to feature specs — I think that there is no other difference 
between feature specs and system specs, although looking at the code for 
SystemExampleGroup vs. FeatureExampleGroup there seems quite a significant 
difference. Perhaps it’s because it’s driving Rails’ 
ActionDispatch::Integration instead of being RSpec-only.

I guess the difference is that your approach is independent of RSpec, whereas 
mine uses RSpec. I could not get your approach to fire up headless Chrome 
(although I didn’t try your exact code, just code that should have the same 
effect (some options are different, but “headless” is still there.

> On Dec 2, 2020, at 3:59 PM, [email protected] <[email protected]> wrote:
> 
> as far as I know driven_by is part of the Rails DSL for system specs, not 
> RSpec feature specs. I've never had to use it with feature specs
> 
> Actually I've never used Rails new system specs, I've always used 
> RSpec/Capybara feature specs with both headless & non headless drivers for 
> years, they work great
> 
> Here's how I configure headless chrome with capybara
> 
> ## Headless!
> Capybara.register_driver :headless_chrome do |app|
>   options = Selenium::WebDriver::Chrome::Options.new
> 
>   options.add_argument('--headless')
>   options.add_argument('--disable-gpu')
>   options.add_argument('--test-type')
>   options.add_argument('--ignore-certificate-errors')
>   options.add_argument('--disable-popup-blocking')
>   options.add_argument('--disable-extensions')
>   options.add_argument('--enable-automation')
>   options.add_argument('--window-size=1920,1080')
>   options.add_argument("--start-maximized")
> 
>   capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
>     logging_prefs: { 'browser' => 'ALL' }
>   )
> 
>   Capybara::Selenium::Driver.new app, browser: :chrome, options: options, 
> desired_capabilities: capabilities
> end
> 
> ## Capy Configuration Defaults
> Capybara.configure do |config|
>   config.server                = :puma
>   config.javascript_driver     = (ENV['HEADLESS'] || ENV['H']) ? 
> :headless_chrome : :chrome
>   config.default_max_wait_time = 7
> end
> 
> I use an environment variable to control when I pick headless or not from the 
> command line, i.e.
> 
> H=1 bundle exec rspec spec/models/
> 
> feature specs go in a /features directory under my /spec directory and look 
> like the following, note the :js tag to trigger the browser vs the capybara 
> default :rack_test (no browser)
> 
> RSpec.feature 'Admin can do stuff, :js do
>   describe 'fancy feature' do
>     it 'works well' do
>       # spec implementation
>     end
>   end
> end
> On Wednesday, December 2, 2020 at 11:16:09 AM UTC-7 Jack R-G wrote:
> Follow-up question, now I’m on RSpec 3.9.3 with Ruby 2.4.10 and Rails 5.1.7, 
> and it seems that the correct solution for getting headless chrome includes 
> the following in the RSpec configuration (instead of the Capybara 
> #register_driver calls):
> 
> RSpec.configure do |config|
>   config.before(:each, type: :system, js: true) do
>     driven_by :selenium_chrome_headless
>   end
> end
> 
> What I’m wondering is why “driven_by” is only supported on “system” specs and 
> not on “feature” specs. Feature specs with “js: true” will always run the 
> full Chrome version, as it stands now (I’ve checked rspec-rails and 
> determined that #driven_by is defined in RSpec::Rails::SystemExampleGroup). 
> Or is that something that will change if I upgrade one or more gems? My 
> understanding is that the only difference between the two modes is whether or 
> not a browser display appears, so if you can do all the same things in a 
> feature spec as a system spec, why can’t you go headless with a feature spec?
> 
> 
>> On Dec 1, 2020, at 11:50 AM, Jack Royal-Gordon <[email protected] 
>> <applewebdata://A8A06A4D-FB06-4B17-943E-32D5BF4260FF>> wrote:
>> 
> 
>> When I tried that, I got a “NoMethodError”. The example was a feature, not a 
>> system spec, and #driven_by is only defined for system tests. So I made it a 
>> system test, and then I got the following error:
>> 
>> LoadError: cannot load such file -- action_dispatch/system_test_case System 
>> test integration requires Rails >= 5.1 and has a hard dependency on a 
>> webserver and `capybara`, please add capybara to your Gemfile and configure 
>> a webserver (e.g. `Capybara.server = :webrick`) before attempting to use 
>> system specs.
>> 
>> I’m on 5.0 (haven’t finished testing with 5.0 so not ready to migrate to 
>> 5.1). The message leads me to believe that headless Chrome will only work on 
>> Rails >= 5.1 (which makes sense, since the articles on headless chrome 
>> started showing up about two months after 5.1 was released).
>> 
>>> On Dec 1, 2020, at 7:35 AM, Phil Pirozhkov <[email protected] 
>>> <applewebdata://A8A06A4D-FB06-4B17-943E-32D5BF4260FF>> wrote:
>>> 
>>> Jack,
>>> 
>>> Do you mean that it opens the Chrome application window?
>>> I recall we were making some changes to prevent Rails from overriding the 
>>> default drivers.
>>> 
>>> Off the top of my head you can try setting the driver in a `before` hook 
>>> https://relishapp.com/rspec/rspec-rails/v/4-0/docs/system-specs/system-spec#system-specs-driven-by-selenium-chrome-headless
>>>  
>>> <https://relishapp.com/rspec/rspec-rails/v/4-0/docs/system-specs/system-spec#system-specs-driven-by-selenium-chrome-headless>
>>> 
>>> 
>>> On Tue, Dec 1, 2020 at 3:25 AM Jack Royal-Gordon <[email protected] 
>>> <applewebdata://A8A06A4D-FB06-4B17-943E-32D5BF4260FF>> wrote:
>>> I know that this is not specifically an RSpec issue, but the Capybara user 
>>> forum is unresponsive and appears relatively inactive, and the RSpec group 
>>> has been very responsive and informative on topics beyond the strict scope 
>>> of RSpec. I’m trying to implement headless Chrome with Capybara and 
>>> Selenium for RSpec feature tests, and I followed the instructions in the 
>>> following article: 
>>> https://www.imaginarycloud.com/blog/from-capybara-webkit-to-headless-chrome-and-chromedriver/
>>>  
>>> <https://www.imaginarycloud.com/blog/from-capybara-webkit-to-headless-chrome-and-chromedriver/>
>>> 
>>> I’ve added the following gems: webdrivers (v 3.9.4), capybara-selenium (v 
>>> 0.0.6), and capybara (v 3.15.1). In my spec_helper.rb file, I’ve added the 
>>> following code:
>>> 
>>> Capybara.register_driver :chrome do |app|
>>>   Capybara::Selenium::Driver.new(app, browser: :chrome)
>>> end
>>> 
>>> Capybara.register_driver :headless_chrome do |app|
>>>   capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
>>>     chromeOptions: {
>>>       args: %w[headless 
>>> enable-features=NetworkService,NetworkServiceInProcess]
>>>     }
>>>   )
>>> 
>>>   Capybara::Selenium::Driver.new app,
>>>     browser: :chrome,
>>>     desired_capabilities: capabilities
>>> end
>>> 
>>> Capybara.default_driver = :headless_chrome
>>> Capybara.javascript_driver = :headless_chrome
>>> 
>>> What I’m getting, when I run a feature spec with js:true is a full browser, 
>>> which is obviously not what I’m expecting. Is there anything obvious that 
>>> I’m doing wrong here?
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "rspec" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected] 
>>> <applewebdata://A8A06A4D-FB06-4B17-943E-32D5BF4260FF>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/rspec/828B0D8D-B280-4A3E-B416-F78658A5A754%40pobox.com
>>>  
>>> <https://groups.google.com/d/msgid/rspec/828B0D8D-B280-4A3E-B416-F78658A5A754%40pobox.com?utm_medium=email&utm_source=footer>.
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "rspec" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected] 
>>> <applewebdata://A8A06A4D-FB06-4B17-943E-32D5BF4260FF>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/rspec/CAAk5Ok-QqqdVrQmxSL7waPs1RFtvA-BfyseGT4kQTDAtkBZLoQ%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/rspec/CAAk5Ok-QqqdVrQmxSL7waPs1RFtvA-BfyseGT4kQTDAtkBZLoQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "rspec" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <applewebdata://A8A06A4D-FB06-4B17-943E-32D5BF4260FF>.
> 
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/rspec/C15243D3-6C54-4FA0-B7FE-DCB80B6E8FF0%40pobox.com
>>  
>> <https://groups.google.com/d/msgid/rspec/C15243D3-6C54-4FA0-B7FE-DCB80B6E8FF0%40pobox.com?utm_medium=email&utm_source=footer>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rspec/a51e1cc9-fddb-4b6b-a1f2-9e0ac0c19a2en%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/rspec/a51e1cc9-fddb-4b6b-a1f2-9e0ac0c19a2en%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/E8703166-A1CC-454F-90DB-D68010C2265F%40pobox.com.

Reply via email to