多文件上传

背景:

从本地文件夹选择文件上传,上传标签为input类

说明:

直接选择采用send_keys()方法上传,过程中遇到了一些坑

尝试一:

基类封装方法

    def input_text(self, text, *loc):
        """
        向输入框中输入内容
        :param text: 输入内容
        :param loc: 定位器
        :return:
        """
        input_ele = self.driver.find_element(*loc)
        input_ele.send_keys(text)

页面封装方法:

 def get_allFiles(self, type_num):
        """
        获取本地文件列表
        :param type_num: 选择上传的资源类型
        :return: 本地文件路径
        """
        file_list = []
        if type_num == 1:
            path = "D:/自动化文件/图片"
        elif type_num == 2:
            path = u"D:/自动化文件/音视频"
        elif type_num == 3:
            path = u"D:/自动化文件/文档"

        dirs = os.listdir(path)  # 返回指定路径下的文件和文件夹列表
        for file in dirs:
            file_name = path+"/"+file
            file_list.append(file_name)
        return file_list

    def uploads(self, filename):
        """
        选择上传文件
        :return:
        """
        print("upload:", filename)

        self.input_text(filename, *self.add_file)

测试用例:

    def test_addFiles(self):
        """
        测试上传资源
        :return:
        """
        sleep(3)
        sure_rtype = self.rPage.click_resource_type()  # 选择要上传的类型
        sleep(3)
        allfiles_list = self.rPage.get_allFiles(sure_rtype)  # 获取当前类型下,所有本地文件列表
        add_filenum = randint(1, 9)  # 上传的文件个数
        print("选择个数", add_filenum)
        num_list = []  # 确定文件列表需上传文件的下标
        flag = True
        while flag:
            if len(num_list) < add_filenum:
                rand_num = randint(0, len(allfiles_list)-1)
                num_list.append(rand_num)
                flag = True
            else:
                flag = False

        for i in num_list:
            self.rPage.uploads(allfiles_list[i])

情况1.多文件上传时,采用循环遍历上传方式,上传数据重复,出现:文件1;文件1,文件2;文件1,文件2,文件3...

开始猜测是因为执行速度太快,所以在循环中加入延时,但结果依然没有改变,猜测错误。后来看到一篇文章,说文件后加“\n”可以解决上传多个文件出现重复的问题,重新尝试。

尝试二:

name = ""
        for i in num_list:
            sleep(2)
            name = name + allfiles_list[i] + "\\n"
        result = name[0:-2]

        self.rPage.uploads(result)

把所有选择的文件组合成一个字符串直接传入,出现无效参数异常。

开始怀疑是“\\n”出了问题,但是控制台输出结果似乎也没错。

验证开始:直接粘贴了控制台输出的结果,放在上传函数中:

self.rPage.uploads("D:/自动化文件/音视频/飞鸟和蝉 - 任然.mp3\nD:/自动化文件/音视频/谪仙 - 伊格赛听、叶里.mp3")

结果上传成功了。到这我已经完全蒙了,为什么一样的字符串放在变量里不成功,直接写成功了呢?也许某个环节把类型搞错了,

结果改成了这样:

self.rPage.uploads(str(result))

这样:

self.rPage.uploads("""\""""+ result+"""\""")

都不行!!

后来看到这个:https://blog.csdn.net/u012095723/article/details/97774320

input的上传用多行字符串来实现

 name = ""
 for i in num_list:
      name = name + allfiles_list[i] + "\n"
result = name[0:-1]

完美解决。

posted @ 2021-01-07 15:01  海浪。  阅读(239)  评论(0)    收藏  举报