Closed juanca closed 5 years ago
I think I get where you are coming from. Here is perhaps another option: what about defaulting the file_detector
when a browser: :remote
configuration is used? Ideally, the default is only used when file_detector is not customized -- because otherwise this is broken. Or maybe it should be part of the Capybara documentation for remote file uploads?
However, I can also make this issue in the Ruby bindings repository for Selenium.
Actually, assuming you're running current version of Firefox or Chrome - it should already be doing basically this - https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selenium/node.rb#L306
I forgot I had implemented that -- and now I'm overthinking whether I should have implemented it :)
Also rather than using make_visible, you might want to see if the block form of attach_file
works for your use case - since it more closely imitates what a user would do
attach_file Rails.root.join(filename) do
# perform whatever action a user actually does that would open the file select dialog
end
Looks like I added it in Capybara 3.28
I'm going back and forth on whether it should be in Capybara, Selenium, or my code.
I am unfortunately stuck on the latest Capybara for Ruby 2.3. However, if it is on the latest then I can add yet another incentive for prioritizing Ruby 2.4.
I'll close this for now. I am going to leave the configuration in my test setup until I upgrade.
For those in my same boat:
require 'capybara/rails'
Capybara.register_driver :selenium do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
browser_options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
driver_options = {
options: browser_options,
:browser => :remote,
:url => 'http://localhost:4444/wd/hub',
}
driver = Capybara::Selenium::Driver.new(app, driver_options)
driver.browser.file_detector = lambda { |args| args.first.to_s } # Remove on latest Capybara
driver
end
Update: The above does not work (for me). I am opting for customizing per attach_file
usage for the sake of simplicity.
@juanca you may want to focus on ruby 2.5/2.6 updating - 2.4 will be EOL relatively soon and Capybara will then drop support for it
Note: This is for issues with Capybara. If you have a howto type question, please ask on the mailing list as requested in the README: http://groups.google.com/group/ruby-capybara
Meta
Capybara Version: ruby-2.3.3@mavenlink/gems/capybara-3.15.1 Driver Information (and browser if relevant): ruby-2.3.3@mavenlink/gems/selenium-webdriver-3.142.4 with Mozilla Firefox 69.0.2
Expected Behavior
I have a few pre-existing tests which upload a file to our Rails test server from the remote browser. Something like:
I expect this to just work. However, the thing that works is something like:
Resource: https://saucelabs.com/blog/remote-file-uploads-with-selenium-capybara
Actual Behavior
The test software does not upload the file correctly. Here is a stack trace:
Steps to reproduce
attach_file
from the local filesystem to the remote filesystemI could set us up with a test repository if we need more detailed steps to reproduce.
I was wondering whether this should be fixed with a simple conditional: if browser is remote then add the shim suggested by saucelabs.