使用Python Selenium WebDriver上传多个文件

时间:2014-04-29 22:38:15

标签: python selenium selenium-webdriver

我有一个html元素

<input type=file multiple="">

如何使用send_keys上传多个文件?

目前这适用于上传单个文件。我想用它来上传多个文件

我尝试过逗号分隔的路径,但没有运气。

6 个答案:

答案 0 :(得分:1)

以下示例适用于我上传多张照片的特定情况,可能会帮助某人...

Photos是一个字符串数组,['/Users/foo/bar/beautiful_forest-1546653.jpg', '/Users/foo/bar/DTHalloween.jpg']然后我循环并按send_keys上传它们。我确保通过检查上传的文件名是否存在于DOM中来上传它们,如果成功的话,它将会存在(特定于我的情况)。 FWIW,我正在测试一个react.js网络应用程序btw。

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 :(得分:0)

首先,将所有文件发送到元素,然后提交。

以下是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

我不确定这是否有效,但只是尝试一下,让我知道结果。

答案 2 :(得分:0)

我试过这个。 uploader.send_keys'path_to_file1'将上传file1,当我尝试上传file2时,

抛出异常,说“uploader”元素无法与

交互

我做了一个uploader.is_enabled()

它给了我错误的

答案 3 :(得分:0)

path =“ / home / downloads /” send_keys(路径+“ file1.csv \ n” +路径+“ file2.csv”)

我发现它可以在我的代码中正常工作。尝试一下,让我了解您遇到的错误。

答案 4 :(得分: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()

答案 5 :(得分:0)

尝试使用它,因为对我有用:

 @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)