Watir-Webdriver: загрузка файлов работает некорректно в Firefox - PullRequest
2 голосов
/ 02 сентября 2011

Используя этот код, я не могу получить файл для корректной загрузки на сайт.

browser.form(:index, 2).file_field(:name, "filedata").set(""+folderName+"/iTunesArtwork")

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

Вот ссылка на HTML: http://f.cl.ly/items/3v3o1p1g0t2S1q3q3Q1h/Text%202011.09.03%2011:40:06%20PM.html

Как видите, html находится в теге формы. Если я попытаюсь получить доступ к file_field, не пройдя сначала форму, я получу сообщение об ошибке, в котором говорится, что с элементом невозможно взаимодействовать, потому что он не виден. Кто-нибудь знает, что происходит?

Ответы [ 3 ]

2 голосов
/ 03 сентября 2011

Ваш локальный файл, который вы загружаете, не должен существовать локально.

Я загрузил ваш HTML-код по адресу: http://dl.dropbox.com/u/18859962/uploader.html

Я пробовал это:

ruby-1.9.2-p290 :001 > require "watir-webdriver"
 => true 
ruby-1.9.2-p290 :002 > b = Watir::Browser.start "http://dl.dropbox.com/u/18859962/uploader.html"
 => #<Watir::Browser:0x..fdea53ebfe3940b9a url="http://dl.dropbox.com/u/18859962/uploader.html" title="untitled"> 
ruby-1.9.2-p290 :003 > b.file_field.exists?
 => true 
ruby-1.9.2-p290 :004 > local_file = "/users/me/ie.html"
 => "/users/me/ie.html" 
ruby-1.9.2-p290 :005 > File.exists? local_file
 => true 
ruby-1.9.2-p290 :006 > raise "error" unless File.exists? local_file
 => nil 
ruby-1.9.2-p290 :007 > b.file_field.set local_file
 => "/users/me/ie.html

Пожалуйста, запустите ваш скрипт для этого размещенного html-файла и отчитайтесь.

Кроме того, вы должны вызвать исключение, если локальный файл не существует, чтобы устранить эту ошибку.

1 голос
/ 01 декабря 2011

Мне не удалось заставить file_field.set работать, пока я не начал указывать ему абсолютный путь к файлу.

Мой код выглядит примерно так:

relative_path = 'image.png'
full_path = File.expand_path relative_path
browser.file_field(:id, 'file_field_id').set full_path

Надеюсь, этопомогает!

0 голосов
/ 24 ноября 2011

С точки зрения этой части вашего вопроса:

Как вы видите, HTML находится в теге формы.Если я попытаюсь получить доступ к file_field, не пройдя сначала форму, я получу сообщение об ошибке, в котором говорится, что с элементом невозможно взаимодействовать, потому что он не виден.Кто-нибудь знает, что происходит?

Наиболее вероятный ответ: в DOM может быть другое поле ввода с таким же именем, которое в данный момент невидимо для пользователя.Не имея возможности просмотреть всю страницу и увидеть весь HTML, я не могу сказать наверняка, но эта ошибка типична для тех случаев, когда я пытался взаимодействовать с элементами управления, которые имели то же имя или текст, что и другие, но былив настоящее время скрыто от глаз.поиск по коду страницы по имени или тексту, который я использовал, обычно обнаруживал другой элемент.Изменение того, как я обращался к вещам (либо указав уникальный контейнер, как вы делаете, либо добавив значение :index вместе с существующим идентификатором, позволит вам получить «правильный» экземпляр элемента.

Вы можете переключиться на использование :id для идентификации поля (оно имеет одно поле) и посмотреть, работает ли это без необходимости сначала указывать внешний элемент контейнера (формы). Выбор по ID, как правило, предпочтительнее, так как значение должно быть уникальнымна странице, если это действительный HTML.

Это не относится к аспекту «почему он не загружает» вашего вопроса, однако, я подозреваю, что это реальная проблема, с которой вам нужна помощь, но она решает эту проблему.этот аспект вашего вопроса.

Что касается остальных, не имея возможности самостоятельно взаимодействовать с сайтом, трудно сказать, почему он ведет себя так, как он есть (а если сайт itunes, вам следуетпроверьте, что их условия обслуживания говорят об использовании автоматизации для доступа к сайту)

...