Выбор локальных файлов с помощью watir-webdriver

Я пытаюсь автоматизировать процесс выбора локального файла с html-страницы с помощью watir-webdriver.

У меня есть следующий html

<body>
<form method="post" action="upload" enctype="multipart/form-data">
test file to upload: <input type="file" name="file" size="60" id="test"/>
<input type="submit" value="Upload" name="upload" id="upload" />
</form>
</body>

Я пытаюсь щелкнуть ввод с помощью id из test и установить путь к локальному файлу, который я хочу загрузить, используя watir-webdriver.

Я могу использовать следующее, чтобы нажать кнопку, чтобы открыть окно выбора, используя

@browser.goto 'http://www.test.com'
@browser.button(:id => 'test').click

однако я пытаюсь использовать следующее (из исследований это кажется правильным, но не работает)

@browser.file_field(:name => 'file').set("C:\\path\\to\\test\\file\\validTest.xml")

что приводит к следующей ошибке

Watir::Exception::UnknownObjectException: unable to locate element, using {:name=>"file",    :tag_name=>"input", :type=>"file"}

пытающийся

@browser.button(:id => 'test').set("C:\\path\\to\\test\\file\\validTest.xml")

приводит к следующей ошибке

NoMethodError: undefined method `set' for #<Watir::Button:0x3859920>

Кто-нибудь может помочь? Я изо всех сил пытаюсь понять, почему опция file_field не работает.


person user3927287    schedule 18.12.2014    source источник
comment
Если вы получаете UnknownObjectException, попробуйте @browser.file_field(:name => 'file').exists?. Если false, то возможно, что элемент на самом деле не находится (например, во фрейме, асинхронная загрузка и т. д.). А класс Button не имеет метода .set, так что ошибка правомерна.   -  person orde    schedule 19.12.2014


Ответы (3)


Попробуйте использовать следующую функцию:

@browser.file_field(:id,"upload").set("filepath")

Кроме того, если вы используете браузер IE, убедитесь, что вы используете IEDriverServer_Win32_2.33.0, так как он отлично работает с этим драйвером, а не с последним.

person Rahul    schedule 30.12.2014

Попробуй это:

@browser.file_field(:id => 'test').set("C:\\path\\to\\test\\file\\validTest.xml")
person Alex Holubenko    schedule 18.12.2014
comment
возвращает Watir::Exception::UnknownObjectException: unable to locate element, using {:id=>"test", :tag_name=>"input", :type=>"file"} - person user3927287; 19.12.2014
comment
@user3927287, хорошо, попробуй так, тоже @browser.element(:xpath => '//input[@type="File"]') - person Alex Holubenko; 19.12.2014
comment
возвращает NoMethodError: undefined method "set" for #<Watir::HTMLElement:0x38239c8> - person user3927287; 19.12.2014
comment
@ user3927287, извините, это: @browser.file_field(:xpath => '//input[@type="File"]') - person Alex Holubenko; 19.12.2014
comment
спасибо за быстрые ответы: @browser.file_field(:xpath => '//input[@type="File"]') возвращает Watir::Exception::UnknownObjectException: unable to locate element, using {:xpath=>"//input[@type=\"File\"]", :tag_name=>"input", :type=>"file"}, а @browser.file_field(:xpath => '//input[@type="file"]') возвращает Watir::Exception::UnknownObjectException: unable to locate element, using {:xpath=>"//input[@type=\"file\"]", :tag_name=>"input", :type=>"file"} проблема связана с HTML? - person user3927287; 19.12.2014
comment
@user3927287 user3927287, я так не думаю, но HTML, который вы отправляете, на 100% правильный? - person Alex Holubenko; 19.12.2014
comment
@user3927287, также найди этот вариант, @browser.find_element(:name, "file").send_keys("C:\\path\\to\\test\\file\\validTest.xml") - person Alex Holubenko; 19.12.2014

Попробуйте использовать это в последней версии IEDriver. назначьте путь к файлу переменной, а затем установите его

filepath = "C:\\path\\to\\test\\file\\validTest.xml"
@browser.file_field(:id,"upload").set(filepath)
person Jagamanikandan ..    schedule 13.12.2017