Думаю, я уже сталкивался с этой проблемой.
Когда вы пишете сценарии селена на Ruby, вы можете управлять всеми окнами браузера. Но диалог выбора файлов и диалог загрузки файлов на самом деле являются системными окнами, поэтому вы не можете управлять ими с помощью селена.
Однако вы можете управлять ими через гем Win32OLE для тестов, работающих в Windows. Но, конечно, тогда вы не сможете запустить эти тесты на Mac или Linux.
Как и селен в целом, он довольно хакерский. Но вот как это работает:
require 'selenium'
require 'test/unit'
require 'win32ole'
class DownloadFileTest < Test::Unit::TestCase
def setup()
@wsh = WIN32OLE.new('Wscript.Shell')
end
def teardown
WIN32OLE.ole_free(@wsh) # yes, this is required *rolls eyes*
end
def test_download_file
# ...stuff that causes a download window to pop up...
@wsh.AppActivate("Opening")
sleep(2)
@wsh.SendKeys("{RIGHT}{ENTER}") # Hits ok button - file downloads
sleep(3)
# Use regular Ruby File methods to assert stuff on the file content
end