2014-07-15 3 views
1

Мне нужно загрузить файл через форму поля файла. Локально он отлично работает. Но с помощью теста Selenium Grid необходимо загрузить файл на удаленный компьютер.file_detector error watir webdriver

Решение использует детектор файлов. Как описано здесь https://github.com/watir/watir-webdriver/issues/175 или здесь https://saucelabs.com/resources/selenium-file-upload

В моей hooks.rb

require "watir-webdriver" 

client = Selenium::WebDriver::Remote::Http::Default.new 

capabilities = Selenium::WebDriver::Remote::Capabilities.new(browser_name: ENV['BROWSER'].to_sym, :http_client => client) 
browser = if ENV['REMOTE'] 
    Watir::Browser.new(
    :remote, 
    url: 'http://remoteurl:4444/wd/hub', 
    desired_capabilities: capabilities, 
    :http_client => client 
) 
else 
    Watir::Browser.new(ENV['BROWSER'].to_sym, :http_client => client) 
end 

browser.driver.file_detector = lambda do |args| 
    str = args.first.to_s 
    str if File.exist?(str) 
end 

Но когда я запускаю тесты, они в конечном итоге с ошибкой: undefined method `file_detector=' for #<Selenium::WebDriver::Driver:0x000000012902b0> (NoMethodError)

Как я могу загрузить файл с помощью Selenium Grid?

ответ

2

Просматривая код, метод file_detector= определен в модуле Selenium::WebDriver::DriverExtensions::UploadFiles. Единственным мостом, использующим это расширение драйвера, является класс Selenium::WebDriver::Remote::Bridge.

Других слов, метод будет доступен только для браузеров, созданных с использованием типа :remote:

browser = Watir::Browser.new(:remote) 

Я предполагаю, что ваши получаю это исключение при использовании не-удаленных драйверов (т.е. при переходе вниз «еще "часть инструкции" if "). Попробуйте переместить настройку file_detector только при использовании удаленного драйвера.

if ENV['REMOTE'] 
    browser = Watir::Browser.new(
    :remote, 
    url: 'http://remoteurl:4444/wd/hub', 
    desired_capabilities: capabilities, 
    :http_client => client 
) 
    browser.driver.file_detector = lambda do |args| 
    str = args.first.to_s 
    str if File.exist?(str) 
    end 
else 
    browser = Watir::Browser.new(ENV['BROWSER'].to_sym, :http_client => client) 
end 
Смежные вопросы