使用Python Selenium WebDriver上传多个文件
我有一个 HTML 元素
<input type=file multiple="">
我该如何使用 send_keys 来上传多个文件呢?
现在这个方法只能上传一个文件。我想用它来上传多个文件。
我试过用逗号分隔的路径,但没有成功。
6 个回答
0
我没有测试这段代码,但我觉得它应该能正常工作。
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()
0
我试过这样做。用uploader.send_keys 'path_to_file1'可以上传文件1,但当我尝试上传文件2时,
出现了一个错误,提示“无法与'uploader'元素进行交互”。
我检查了一下uploader.is_enabled(),
结果是false。
1
这里有一个例子,适合我自己的情况,用来上传多张照片,可能对其他人也有帮助...
Photos
是一个字符串数组,比如 ['/Users/foo/bar/beautiful_forest-1546653.jpg', '/Users/foo/bar/DTHalloween.jpg']
。然后我通过 send_keys
循环上传这些照片。我会检查上传的文件名是否存在于网页的结构中,如果存在就说明上传成功(这是我特定的情况)。顺便说一下,我是在测试一个 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
1
首先,把所有文件发送到这个元素,然后再提交。
下面是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
我不确定这样做是否有效,但你可以试试看,然后告诉我结果。
3
路径 = “/home/downloads/”
发送键(path + “file1.csv \n” + path + “file2.csv”)
我发现这个在我的代码中可以正常工作。你也试试这个,然后告诉我你遇到的错误。