今天有时间了,想好好的把之前遇到过的自动化问题总结一下,以后有新的总结再更新

目录:

一、上传文件(4.11)

二、下拉框选择(4.11)

三、下拉框隐藏元素定位(6.20)

附录:

一、上传文件

利用鼠标pymouse、键盘pykeyboard操作

import pyperclip
from pykeyboard import PyKeyboard
from pymouse import PyMouse def upload_file(self, fileName):
"""PyUserInput方法:上传文件""" # 创建鼠标对象
k = PyKeyboard()
# 创建键盘对象
m = PyMouse()
# 模拟快捷键Command+Shift+G
k.press_keys(["Command", "Shift", "G"])
# 输入文件路径
x_dim, y_dim = m.screen_size()
# //点击屏幕中间,除法取整数
m.click(x_dim // 2, y_dim // 2, 1) # 点击,想x,y坐标,button:-1表示左键,-2表示右键,n:默认1次,2双击
# 复制文件文件全路径
pyperclip.copy(fileName)
# 粘贴路径,模拟快捷键Command+V
k.press_keys(["Command", "V"])
k.tap_key("Shift") # 加上这个之后才能点击回车(未知情况)
for i in range(2):
k.press_key("return")
time.sleep(2) # 调用上传文件方法
def uploadImg(self, imgLoc, imgName):
"""上传图片文件""" self.el_click(imgLoc)
Fun().upload_file(loc.filePathData + imgName)
sleep(2)

二、下拉框选择  返回目录

1、Select下拉框

   # ①在basePage定义Select下拉选择方法
def webDriverWait(self, loc):
"""显式等待,查找单元素"""
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(loc))
return self.find_element(loc) def el_select(self, loc, text):
"""下拉框选择元素"""
Select(self.webDriverWait(loc)).select_by_visible_text(text) # ②定位Select元素
province_loc = (By.CSS_SELECTOR, "form>div:nth-child(4)>div>div>label:nth-child(1)>select")
# ③调用Select方法
self.el_select(loc.province_loc, loc.province)

2、非Select下拉框

1)方法一:

优:定位元素写法简洁,定位速度较快

缺:不利于维护,定位不明确

    def els_click_index(self, loc, index):
"""点击多元素事件:坐标"""
self.webDriverWaits(loc)[index-1].click() # 定位多元素
regionName1_loc = (By.CSS_SELECTOR, "ul>li>span")
  
# 定位多元素,并根据元素的坐标位置,进行选择
self.els_click_index(loc.regionName1_loc, 2) # 坐标点:选择第二个下拉框,运行22s283ms

2)方法二:

优:定位元素写法简洁,定位元素明确利于维护

缺:定位速度最慢

    def els_click(self, loc, name):
"""点击多元素事件:元素"""
list = self.webDriverWaits(loc)
for i in list:
if name == i.text:
i.click()
time.sleep(2) # 定位元素
  regionName2 = "新建区域2"
regionName2_loc = (By.XPATH, "//ul/li/span") # 定位多元素,并且调用方法点击指定名元素
self.els_click(loc.regionName2_loc, loc.regionName2) # 多元素方法:选择第二个下拉框,运行25s624ms

3)方法三:(推荐)

优:定位元素明确利于维护,定位速度最快

缺:定位元素写法较长

    def el_click(self, loc):
"""点击单元素事件"""
self.webDriverWait(loc).click() # 定位多元素,并模糊查找元素
regionName2 = "新建区域2"
regionName3_loc = (By.XPATH, f"//ul/li/span[contains(text(),'{regionName2}')]") # 定位多元素,并且点击指定名元素
self.el_click(loc.regionName3_loc) # 多元素简写:选择第二个下拉框,运行20s246ms

综合以上三种方法,方法三效果更好,选择元素目的明确,代码运行时间更少,代码更简洁。

3、下拉框隐藏元素定位

1)方法一:

location_once_scrolled_into_view,滚动到网页上的特定元素

    def el_clickBoxView(self, loc):
"""点击下拉框隐藏的元素"""
self.webDriverWait(loc).location_once_scrolled_into_view
self.el_click(loc) # 元素定位
regionName3_loc = (By.XPATH, f"//ul/li/span[contains(text(),'{regionName2}')]")
# 进行定位
self.el_clickBoxView(loc.regionName3_loc)

2)方法二:

    def executeScript(self, js, loc):
"""执行JS元素"""
if loc == None:
return self.driver.execute_script(js)
else:
return self.driver.execute_script(js, self.webDriverWait(loc)) regionName2 = contractorData['regionName']
regionName3_loc = (By.XPATH, f"//ul/li/span[contains(text(),'{regionName2}')]")
regionName_js = "arguments[0].scrollIntoView(false);"
regionName_click_js = "arguments[0].click();" # 下拉框到不可见的元素:JS方法
self.executeScript(loc.regionName_js, loc.regionName3_loc)
self.executeScript("arguments[0].click();", loc.regionName3_loc)

附录:  返回目录

参考文章

木下瞳selenium 定位下拉选择框元素

泠月飞花selenium Xpath应用疑难一:contains的用法

Listen-Yselenium~进阶操作定位一组元素、定位多层框架/窗口、下拉框处理、提示框处理、上传文件操作

菡哥125Python中pyautogui库的最全使用方法

泡沫小哥哥Selenium中错误:selenium.common.exceptions.ElementClickInterceptedException: Message: element click inte

守护@往昔13 - selenium 常见操作,js操作-将元素滚动到页面可见区域

【Python自动化】之特殊的自动化定位操作的更多相关文章

  1. appium+python 微信小程序的自动化

    sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q  -p 8889 -s addons.py http: ...

  2. Python+Appium自动化测试(3)-编写自动化脚本

    之前一篇博客已经讲述怎样手动使用appium-desktop启动测试机上的app,但我们实际跑自动化脚本的过程中,是需要用脚本调用appium启动app的,接下来就尝试写Python脚本启动app并登 ...

  3. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  4. python自动化测试(3)- 自动化框架及工具

    python自动化测试(3) 自动化框架及工具 1   概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...

  5. 转载:python + requests实现的接口自动化框架详细教程

    转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...

  6. python + requests实现的接口自动化框架详细教程

    前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自 ...

  7. Python实现扫描作业配置自动化

    持续集成平台接入扫描作业是一项繁琐而又需要细致的工作,于是趁着闲暇时间,将代码扫描作业用Python代码实现了配置自动化. 每次配置作业的过程中,都会在checkcode1或者checkcode3上 ...

  8. 基于Python实现的死链接自动化检测工具

    基于Python实现的死链接自动化检测工具   by:授客 QQ:1033553122 测试环境: win7 python 3.3.2 chardet 2.3.0 脚本作用: 检测系统中访问异常(请求 ...

  9. Python接口测试框架实战与自动化进阶☝☝☝

    Python接口测试框架实战与自动化进阶☝☝☝  一.fiddler在工作中的运用  1.如何抓接口 抓紧手机端接口 ①.在电脑终端输入:ipconfig ,找到电脑ip ②.打开手机,连接WiFi, ...

  10. airtest自动化中的poco+python连接手机实现ui自动化

    airtest:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html官网地址 AirtestIDE:跨平台的UI自动化测试编 ...

随机推荐

  1. css3 html5

    vscode的使用 什么是HTML5? HTML5新增语义化标签 多媒体标签 <audio>音频标签 谷歌浏览器 把autoplay属性给我们禁用. 两种音频格式的播放 视频标签<v ...

  2. java后端解决请求跨域

    跨域 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同 ...

  3. 安装phpgjx工具

    直接按照phpgjx配置文件进行安装. 重启mysql和访问phpgjx都会生成配置的日志文件 按照文档安装可能日志文件中不会产生SQL记录 解决方案: 可以进入mysql后,查看该日志是否开启 / ...

  4. c++ 异常记录

    vector的排序使用的iterator必须先+1 再-1,否则报溢出警告,不能正确排序遍历map获取到的是对象副本,需要引用,不能直接拿来做引用 fortmat只支持原始类型,wstring,str ...

  5. Fiddler+proxifier解决抓取不到客户端接口的问题

    工作中偶尔会遇到Fiddler抓不到客户端接口问题,那么就要借助第三方工具proxifier来实现了: 下载地址: 原地址:链接: https://pan.baidu.com/s/1JPJ4cILEs ...

  6. springboot集成minIO

    文件系统:负责管理和存储文件的系统软件.操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件 minIO:轻量级服务分布式文件系统,适合存储非机构化数据.采用去中心化共享架构,结 ...

  7. web3 产品介绍:Decentraland:开启你的虚拟现实区块链游戏之旅

    Decentraland(https://decentraland.org/)是一款基于区块链技术的虚拟现实游戏,它将去中心化的概念引入游戏世界,为玩家提供了一个创造.交互和探索的虚拟空间.在Dece ...

  8. 【IDEA】创建Maven工程

    当前工程,点new - project 选Maven,不需要点选什么骨架创建,骨架创建要下载大量依赖,生成时间太长, 空Maven的目的是让我们自己了解这个项目结构,需要什么依赖再加什么依赖 框线内的 ...

  9. 【DataBase】XueSQL Training

    地址: http://xuesql.cn/ Lesson0 -- 认识SQL -- [初体验]这是第一题,请你先将左侧的输入框里的内容清空,然后请输入下面的SQL,您将看到所有电影标题: SELECT ...

  10. 图解Java设计模式

    待补充 设计模式介绍 设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 设计模式使用的位置 功能模块+框架上. 设计模式在软件中哪里?面向对象( ...