selenium之批量上传文件
创始人
2024-11-15 16:03:33
0
  1. 在UI自动化测试过程经常会有上传附件的操作,针对附件上传的场景,通常可以归为几类:
    1. 场景一:只上传一个附件
    2. 场景二:上传固定几个附件
    3. 场景三:上传动态数量的附件
      2.针对以上几种场景,以动态文件数数量为例进行上传操作解决方案:
    4. 先了解上传材料会有哪些组合比如:状态+上传,仅状态,状态+上传+预览,状态+上传+预览+下载模板

在这里插入图片描述

  1. 了解页面元素的组成和xpath规则,选择合适的方案:
 以下分别给出两组不同组合类型,组合都是状态+上传  第一组只有div标签页,获取到的xpath也是div组成,规则不明显 第二组span标签页,获取到的xpath以tr[1],tr[2]...tr[n]规则  页面元素组成类型: 
待上传
已上传
上传元素对应:
上传
上传元素对应xpath: //*[@id="app"]/div[1]/div[2]/div/div/div[1]/div[2]/div[8]/div/div[3] //*[@id="app"]/div[1]/div[2]/div/div/div[1]/div[2]/div[9]/div/div[3] 页面元素组成类型: 待上传 已上传 上传元素对应: 上传元素对应xpath: //*[@id="app"]/div[1]/div[2]/div/div/main/div/div/div[3]/table/tbody/tr[1]/td[5]/div/div/div/div/button //*[@id="app"]/div[1]/div[2]/div/div/main/div/div/div[3]/table/tbody/tr[2]/td[5]/div/div/div/div/button
  1. 以上两种组合模式通用的处理逻辑如下:
    1. 先获取到待上传状态和上传按钮个数
    2. 循环待上传状态或上传按钮对应个数,并且获取待上传状态和上传按钮对应xpath属性既get_attribute,以get_attribute获取到的属性为筛选条件
    3. 达成对应条件后循环点击上传按钮
    4. 停止循环
      1. 第一种情况:当未上传状态数量等于已经上传数量则停止循环
      2. 第二种情况:*新增一个标志变量*uploaded_found*,初始化为 False,当状态元素标志都变为已上传状态时*uploaded_found=True并且停止循环

第一组以div标签的具体代码:

  #上传按钮元素             documentfile = "//div[@class='size'][@data-v-763e4ba7]"             #未上传状态元素             upload = "//div[@class='main yellow'][@data-v-763e4ba7]"             #未上传总数             uploads = self.driver.find_elements(By.XPATH, upload)             #上传按钮总数             documents = self.driver.find_elements(By.XPATH, documentfile)             while True:                 if len(uploads) > 1:                     for i in range(0, len(uploads)):                         #某一行只存在未上传且不存在已上传状态时达成执行条件                         if "main yellow" in uploads[i].get_attribute("class") and "main blue" not in uploads[i].get_attribute("class"):                             #开始循环执行上传附件操作                             self.driver.execute_script("arguments[0].click();", documents[i])                             #上传文件的具体地址                             self.updowm.PyautoguiWrite(file_path="C:\\Users\\GTJA\\Pictures\\testfilepdf")                             #加上等待时间                             time.sleep(2)                      #判断文件是否全部上传,若全部上传则len(uploadcounts) == len(uploads)成立                     uploadcount = "//div[@class='main blue'][@data-v-763e4ba7]"                     uploadcounts = self.driver.find_elements(By.XPATH, uploadcount)                     if len(uploadcounts) == len(uploads):                         break 

第二组以tr为标签的具体代码:

 self.driver.execute_script("window.scrollTo(0, 0);")             #上传按钮元素             documentfile = '//*[@id="app"]/div[1]/div[2]/div/main/div/main/form/div/div/div/div[1]/div[4]/div[2]/table/tbody/tr/td[3]/div/div/div/div/button'             #状态元素             upload = '//*[@id="app"]/div[1]/div[2]/div/main/div/main/form/div/div/div/div[1]/div[3]/table/tbody/tr/td[2]/div/div'             #获取到所有状态元素个数             uploads = self.driver.find_elements(By.XPATH, upload)             #获取到所有上传按钮个数             documents = self.driver.find_elements(By.XPATH, documentfile)             #新增一个标志变量,初始化为False             uploaded_found = False             while True:                 if len(uploads) > 1:                     for i in range(0, len(uploads)):                         #状态未未上传且已上传不存在则条件达成,开始循环                         if "container pending" in uploads[i].get_attribute("class") and "container pending uploaded" not in uploads[                             i].get_attribute("class"):                             #循环上传文件                             self.driver.execute_script("arguments[0].click();", documents[i])                             #上传文件地址                             self.updowm.PyautoguiWrite(file_path="C:\\Users\\GTJA\\Pictures\\testfilepdf")                             time.sleep(2)                             #状态都变为已上传状态,将标志变量设置为True                             if uploads[i].get_attribute("class") == "container pending uploaded":                                 uploaded_found = True  # 当条件达成时,设置标志变量为 True                                 break                     if uploaded_found:  # 根据标志变量的值来判断是否结束外层的 while 循环                         break 

相关内容

热门资讯

两分钟了解!微信边锋辅助(辅助... 两分钟了解!微信边锋辅助(辅助挂)其实是真的有挂(详细辅助靠谱教程)微信边锋辅助软件透明挂微扑克wp...
黑科技辅助挂“边锋干瞪眼开挂”... 黑科技辅助挂“边锋干瞪眼开挂”外挂透视辅助脚本(原来存在有挂)1、边锋干瞪眼开挂ai辅助优化,边锋干...
1分钟有挂!聚财app辅助(辅... 1分钟有挂!聚财app辅助(辅助挂)教你攻略(一直是有挂)1、超多福利:超高返利,海量正版游戏,聚财...
6分钟辅助!hhpoker辅助... 6分钟辅助!hhpoker辅助器(辅助挂)总是存在有挂(详细辅助普及教程)运hhpoker辅助器辅助...
五分钟辅助!激k辅助器如何下载... 一、激k辅助器如何下载简介了解软件请加微:136704302激k辅助器如何下载是一款在线扑克游戏平台...
黑科技辅助“欢聚水鱼虎步龙行辅... 黑科技辅助“欢聚水鱼虎步龙行辅助器下载”外挂透视辅助挂(总是是有挂)1、让任何用户在无需欢聚水鱼虎步...
3分钟辅助器!微乐家乡自建房辅... 3分钟辅助器!微乐家乡自建房辅助app(辅助挂)确实真的是有挂(详细辅助分享教程);1、实时微乐家乡...
第5分钟辅助挂!腾旭欢乐全集辅... 自定义腾旭欢乐全集辅助系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管...
黑科技辅助“随意玩房卡辅助”外... 黑科技辅助“随意玩房卡辅助”外挂透视辅助器(好像有挂);1、任何随意玩房卡辅助ai辅助神器的玩家都可...
第六分钟辅助挂!家乡大二辅助工... 第六分钟辅助挂!家乡大二辅助工具(辅助挂)详细教程(果然存在有挂)1、构建自己的微扑克辅助插件;2、...