2015-09-15 5 views
2

У меня есть проект, где я загружаю фотографии через ng-file-upload, и мне нужно автоматизировать процесс загрузки с помощью selenium webdriver в Python.Автоматизация загрузки файлов с использованием Selenium и ng-file-upload

мой HTML элемент выглядит следующим образом:

<element 
    ngf-pattern="image/*" accept="image/*" 
    ngf-max-size="10MB" ngf-max-height="1000" ngf-select="addPhoto($index, $file)"> 
    ...</element> 

Выгрузка элемент определенно работает, делая это вручную. Но я не могу найти способ автоматизировать это, используя Selenium в Python. Я попытался найти элемент, а затем отправить ключи абсолютного пути изображения, но это просто помещает абсолютный путь в поле поиска браузера (как если бы я набрал «Command + F» на Mac)

Обратите внимание, что есть no

<input type="file"/> 

с помощью этого способа загрузки файла.

Любые идеи, как это сделать в Python с использованием Selenium? Благодаря!

ответ

0

Там должен быть файлом ввода скрытым, который неявно несет ответственность за загрузку файла. Например, angular-file-upload DEMO page скрыт в нижней части страницы.

Вот рабочий пример:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 


driver = webdriver.Chrome() 
driver.get("https://angular-file-upload.appspot.com/") 

# wait for the upload box to be visible 
wait = WebDriverWait(driver, 10) 
element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[ngf-select]"))) 

# get a model 
model = element.get_attribute("ng-model") 

# find a file input by model 
file_input = driver.find_element_by_css_selector('input[ngf-select][ng-model="%s"]' % model) 

# upload an image 
file_input.send_keys("/absolute/path/to/dr-evil-and-minion-laughing.png") 

Результаты в:

enter image description here

+0

Вы правы, они находятся в нижней части страницы, но они скрыты, так что я могу» t отправить им ключи, знаете ли вы, как я буду обращаться к ним? Я исследовал, и он говорит, что я должен выполнить Javascript, чтобы установить css, чтобы сделать их видимыми, но у меня есть файлы, которые можно воспроизводить, поэтому я не знаю, как получить доступ к одному элементу и сделать его видимым. – northsideknight

+0

@northsideknight вы правы, сделайте их видимыми - см., Например, http://stackoverflow.com/a/25725701/771848. Если у вас есть несколько скрытых элементов, найдите их все и сделайте их видимыми один за другим. – alecxe

Смежные вопросы