Webdriver: загрузка файла

Есть ли способ взаимодействия с полем загрузки файлов в webdriver? Поле формы, в которое вставлен путь, считывается только для того, чтобы я не мог писать.

5 Solutions collect form web for “Webdriver: загрузка файла”

Вы можете установить значение поля ввода с помощью JavaScript. Учитывая, что идентификатор поля – fileName следующий пример устанавливает значение ввода в файл C:\temp\file.txt :

 String script = "document.getElementById('fileName').value='" + "C:\\\\temp\\\\file.txt" + "';"; ((IJavaScriptExecutor)driver).ExecuteScript(script); 

В этом примере driver – это ваш экземпляр WebDriver.

Обратите внимание, что вам нужно использовать четыре обратных слэша ( \ ) для Windows-подобных путей, потому что вам необходимо передать двойные обратные слеши на JavaScript, поэтому вам нужно сбежать с двумя дополнительными косой чертой. Другой вариант – использовать косую черту (например, "C:/tmp/file.txt" ), и это также должно работать.

Вы можете сделать это без использования JavaScript. Вам просто нужно получить поле формы и ввести в него. Что-то вроде (с использованием Ruby API):

 driver.find_element(:id, 'upload').send_keys('/foo/bar') 

Проблема, которую я обнаружил, – это диалоговое окно загрузки, которое вешает webdriver до закрытия. То есть элемент element.click, вызывающий диалог загрузки, не возвращается до тех пор, пока диалоговое окно загрузки не будет закрыто. Чтобы быть ясным, диалоговое окно загрузки означает выбор файла на основе ОС.

Вот мое решение (это немного сложно, но * shrug). Большинство обходных решений для проблем selenium-webdriver должно усложняться).

 # presumes webdriver has loaded the web page of interest element_input = webdriver.find_element_by_css_selector('input[id="uploadfile"]') handle_dialog(element_input, "foobar.txt") def handle_dialog(element_initiating_dialog, dialog_text_input): def _handle_dialog(_element_initiating_dialog): _element_initiating_dialog.click() # thread hangs here until upload dialog closes t = threading.Thread(target=_handle_dialog, args=[element_initiating_dialog] ) t.start() time.sleep(1) # poor thread synchronization, but good enough upload_dialog = webdriver.switch_to_active_element() upload_dialog.send_keys(dialog_text_input) upload_dialog.send_keys(selenium.webdriver.common.keys.Keys.ENTER) # the ENTER key closes the upload dialog, other thread exits 

Используя python 2.7, webdriver 2.25.0, на Ubuntu 12, с firefox.

Для C #, SendKeys() работает, но вы должны использовать \ в вашем пути к файлу вместо /

Например, следующие работы:

 string filePath = @"drive:\path\filename.filextension"; driver.FindElement(By.Id("fileInput")).SendKeys(filePath); 

Но следующее не работает:

 string filePath = "drive:/path/filename.filextension"; driver.FindElement(By.Id("fileInput")).SendKeys(filePath); 

Мы можем использовать следующий (ruby API)

 @driver.find_element(:xpath, "html/body/div[1]/div[2]/div[1]/form/div[4]/div[7]/table/tbody/tr[1]/td[2]/input").send_keys "C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg" 

Это помогло мне загрузить изображение.

  • Как я могу попросить Selenium-WebDriver ждать несколько секунд в Java?
  • WebDriver - дождитесь использования элемента с помощью Java
  • NoSuchElementExeption, selenium, неспособный найти элемент
  • Selenium Web Driver и Java. Элемент не кликается в точке (36, 72). Другой элемент получит клик:
  • Где я могу найти окончательный Selenium WebDriver для Матрицы совместимости Firefox?
  • Как разрешить ElementNotInteractableException в Selenium webdriver?
  • Дождитесь загрузки страницы в Selenium
  • Как обрабатывать загрузку файлов Windows с помощью Selenium WebDriver?
  • Selenium WebDriver: Подождите, пока сложная страница с JavaScript для загрузки
  • WebDriver: проверьте, существует ли элемент?
  • Selenium Webdriver - нажмите на скрытые элементы
  • Давайте будем гением компьютера.