【发布时间】:2014-04-29 22:38:14
【问题描述】:
我有一个html元素
<input type=file multiple="">
如何使用 send_keys 上传多个文件?
目前这适用于上传单个文件。我想用它来上传多个文件
我尝试了逗号分隔的路径,但没有成功。
【问题讨论】:
标签: python selenium selenium-webdriver
我有一个html元素
<input type=file multiple="">
如何使用 send_keys 上传多个文件?
目前这适用于上传单个文件。我想用它来上传多个文件
我尝试了逗号分隔的路径,但没有成功。
【问题讨论】:
标签: python selenium selenium-webdriver
首先,将所有文件发送到元素,然后提交。
以下是 Ruby 代码,但您可以对 Python 应用相同的逻辑:
uploader = driver.find_element(id: 'file-upload')
uploader.send_keys 'path_to_file1'
uploader.send_keys 'path_to_file2'
uploader.send_keys 'path_to_file3'
.
.
.
uploader.submit
我不确定这是否可行,但请尝试一下并告诉我结果。
【讨论】:
这是一个适用于我上传多张照片的具体案例的示例,可能会对某人有所帮助...
Photos 是一个字符串数组,即['/Users/foo/bar/beautiful_forest-1546653.jpg', '/Users/foo/bar/DTHalloween.jpg'],然后我循环并通过send_keys 上传它们。我通过检查上传的文件名是否存在于 DOM 中来确保它们被上传,如果成功(特定于我的情况),它将被上传。 FWIW,我正在测试一个 react.js 网络应用顺便说一句。
def uploadPhoto(self, photos):
try:
drop_zone = self.driver.find_element_by_id('photo-file-input')
alreadyUploaded = [] # keep track of uploaded files
for photo in photos:
photo_name = photo.split('/')[-1].split('.')[0]
if photo_name.lower() in alreadyUploaded:
print("Photo already uploaded with name: ( "+ photo_name.lower()+" )")
continue
alreadyUploaded.append(photo_name.lower())
drop_zone.send_keys(photo)
try:
WebDriverWait(self.driver, 5).until(
EC.presence_of_element_located((By.XPATH, '//img[contains(@data-galleryid, '+ photo_name +')]'))
)
except Exception, e:
raise Exception(e)
return True
except Exception, e:
print 'Failed to upload photo {}'.format(str(e))
return False
【讨论】:
path = “/home/downloads/” send_keys(路径 + “file1.csv \n” + 路径 + “file2.csv”)
我发现它在我的代码中工作。试试这个,告诉我你遇到的错误。
【讨论】:
我试过这个。 uploader.send_keys 'path_to_file1' 将上传file1,当我尝试上传file2时,
抛出异常,说“上传器”元素无法交互
我做了一个 uploader.is_enabled()
它给了我错误
【讨论】:
我没有测试这段代码,但我认为它应该可以工作
image_string = " ".join(images_array)
driver.find_element_by_class_name('PhotoInputFile').send_keys(image_string)
time.sleep(2)
driver.find_element_by_class_name("ButtonUploadPhotos").click()
【讨论】:
尝试使用它,因为对我有用:
@staticmethod
def set_multiple_file_file():
element = (INSERT_FILE)
ROOT_DIR = your.path
first_path = archive1.something
second_path = archive2.something
third_path = archive3.something
element.send_keys(ROOT_DIR + first_path + ROOT_DIR + second_path + ROOT_DIR + third_path)
【讨论】: