Перейти к содержимому

Фотография

Селениум, загрузка файла через кнопку "Загрузить"

Загрузка файла

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 Nikola

Nikola

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Nikola

Отправлено 03 ноября 2016 - 12:32

Привет. У меня такая проблема.

 

Есть форма. Где есть кнопка "Загрузить файл", при нажатии на кнопку, открывается стандартное Виндовое окно, где нужно выбрать файл, нажать Открыть. После файл подгружается.

 

Смотрел много тем в интернете. Нашел такие варианты:

Пишу уже со своими данными.

 

Был такой вариант: 

driver.findElement(By.id("photo")).sendKeys("Z:\\SeleniumExamples\\src\\test\\resources\\photo.png");
Я переделал под себя
 

 1. 

driver.find_element_by_xpath("//button[@ngf-select='uploadStatementScan($file, itm.data)']").sendFile("C:\\RobotDoc\\asd.pdf")

или  еще вариант

  . driver.find_element_by_xpath("//button[@ngf-select='uploadStatementScan($file, itm.data)']").sendFile("C:/RobotDoc/asd.pdf")

2 вариант.

 

# подключаем необходимые модули
from selenium import webdriver
import os


# создаём объект WebDriver для браузера chrome
driver = webdriver.Chrome()


# открываем страницу с формой загрузки файла
driver.get("file://" + os.getcwd() + "/index.html")


# находим элемент <input type="file">
element = driver.find_element_by_id("file")


# заполняем элемент путём до загружаемого файла
element.send_keys(os.getcwd() + "/lenna.png")


# находим элемент <input type="file">
element = driver.find_element_by_id("submit")
 
Но он так же не сработал. При этом я не понял что за штука driver.get("file://" + os.getcwd() + "/index.html")  и зачем она нужна.
 
Собственно вопрос. Как это сделать ?

  • 0

#2 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 03 ноября 2016 - 13:07

тебе нужно не в баттон грузить файл, а в инпут. Найди его и попробуй туда передать путь к файлу


  • 0

#3 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 04 ноября 2016 - 11:29

Как верно сказали выше, этот способ работает только в input type="file".

Также не разбираюсь в Python, но смущает sendFile вместо sendKeys - передается не файл, а путь (строка) к файлу.


  • 0

#4 Nikola

Nikola

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Nikola

Отправлено 04 ноября 2016 - 16:15

Судя по всем хелпам, нужно sendKeys делать. Я в понедельник попробую, посмотрим что будет.


  • 0

#5 Nikola

Nikola

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Nikola

Отправлено 07 ноября 2016 - 06:35

Инпута у себя не нашел в коде.

Как в данной ситуации прикрепить файл ?

Прикрепленные файлы


  • 0

#6 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 07 ноября 2016 - 10:43

С помощью одного Selenium, скорее всего, никак.


  • 0

#7 Nikola

Nikola

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Nikola

Отправлено 07 ноября 2016 - 16:56

Я пишу совместно на Python + Webrdiver 

Какие есть варианты ?


  • 0

#8 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 08 ноября 2016 - 08:41

Инпута у себя не нашел в коде.

Как в данной ситуации прикрепить файл ?

 

Ну если вы его не нашли, это не значит, что его там нет. 

 

У вас судя по всему АнгуларЖС. 

 

вам надо реализовать вставку на JS которая будет передавать в функцию "uploadStatmentScan" путь к файлу и данные формы.

 

Гуглите "вставка js кода в webdriver" или как-то так, я не специалист в вёбдрайвере.

 

Одно могу сказать точно, инпут пути к файлу у вас реализован через JS


  • 0

#9 Nikola

Nikola

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Nikola

Отправлено 08 ноября 2016 - 10:33

Спасибо посмотрю. Если найду решение. напишу тут.


  • 0

#10 Nikola

Nikola

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Nikola

Отправлено 14 ноября 2016 - 13:17

Поискал посмотрел, что-то не осилил.

Буду рад помощи, подсказке.


  • 0

#11 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 15 ноября 2016 - 07:29

http://stackoverflow...ularjs-ng-click

 

и что же люди совсем не умеют пользоваться поиском... У меня поиск занял 3 минуты чтобы найти данную ссылку.

 

вот поисковый запрос который я вбил в гугл "python click on angularJS button"


  • 1

#12 Nikola

Nikola

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Nikola

Отправлено 15 ноября 2016 - 08:17

Спасибо буду пробовать.

английский плохо знаю к сожалению. Искал на русском.


  • 0

#13 White_Pipe

White_Pipe

    Новый участник

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Maki_Hope

Отправлено 21 мая 2022 - 23:14

Тема возможно не актуальна уже, я нашел альтернативное решение, пока не разобрался в js. Можно использовать webdriver в связке с модулями keyboard и pyautogui (если первый не понравится), вводить полный путь к файлу сразу после открытия окна загрузки через keyboard.write(row), но это требует того, чтобы окно с тестами было активным, что не очень удобно, если вы хотите проворачивать параллельно другие процессы, а этот должен быть фоновым.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных