【Python自动化】之特殊的自动化定位操作
今天有时间了,想好好的把之前遇到过的自动化问题总结一下,以后有新的总结再更新
目录:
一、上传文件(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 Xpath应用疑难一:contains的用法》
③Listen-Y《selenium~进阶操作定位一组元素、定位多层框架/窗口、下拉框处理、提示框处理、上传文件操作》
④菡哥125《Python中pyautogui库的最全使用方法》
⑤泡沫小哥哥《Selenium中错误:selenium.common.exceptions.ElementClickInterceptedException: Message: element click inte》
⑥守护@往昔《13 - selenium 常见操作,js操作-将元素滚动到页面可见区域》
【Python自动化】之特殊的自动化定位操作的更多相关文章
- appium+python 微信小程序的自动化
sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q -p 8889 -s addons.py http: ...
- Python+Appium自动化测试(3)-编写自动化脚本
之前一篇博客已经讲述怎样手动使用appium-desktop启动测试机上的app,但我们实际跑自动化脚本的过程中,是需要用脚本调用appium启动app的,接下来就尝试写Python脚本启动app并登 ...
- python自动化测试(2)-自动化基本技术原理
python自动化测试(2) 自动化基本技术原理 1 概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...
- python自动化测试(3)- 自动化框架及工具
python自动化测试(3) 自动化框架及工具 1 概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...
- 转载:python + requests实现的接口自动化框架详细教程
转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...
- python + requests实现的接口自动化框架详细教程
前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自 ...
- Python实现扫描作业配置自动化
持续集成平台接入扫描作业是一项繁琐而又需要细致的工作,于是趁着闲暇时间,将代码扫描作业用Python代码实现了配置自动化. 每次配置作业的过程中,都会在checkcode1或者checkcode3上 ...
- 基于Python实现的死链接自动化检测工具
基于Python实现的死链接自动化检测工具 by:授客 QQ:1033553122 测试环境: win7 python 3.3.2 chardet 2.3.0 脚本作用: 检测系统中访问异常(请求 ...
- Python接口测试框架实战与自动化进阶☝☝☝
Python接口测试框架实战与自动化进阶☝☝☝ 一.fiddler在工作中的运用 1.如何抓接口 抓紧手机端接口 ①.在电脑终端输入:ipconfig ,找到电脑ip ②.打开手机,连接WiFi, ...
- airtest自动化中的poco+python连接手机实现ui自动化
airtest:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html官网地址 AirtestIDE:跨平台的UI自动化测试编 ...
随机推荐
- 『vulnhub系列』HACKABLE-II
『vulnhub系列』HACKABLE-II 下载地址: https://www.vulnhub.com/entry/hackable-ii,711/ 信息搜集: 使用nmap探测存活主机,发现主机开 ...
- ElasticSearch不区分字母大小写搜索
0.停止使用该索引的服务(避免新加了数据没备份) 1.备份filesearch索引(检查备份的索引和原索引数据条数是否一致) 1 POST http://127.0.0.1:9200/_reindex ...
- FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
<FFmpeg开发实战:从零基础到短视频上线>一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流.不过MediaMTX的功能 ...
- JDK9之后 Eureka依赖
<!--Eureka添加依赖开始--> <dependency> <groupId>javax.xml.bind</groupId> <artif ...
- java.net.UnknownHostException: api.weixin.qq.com解决办法
java.net.UnknownHostException: api.weixin.qq.com at java.net.AbstractPlainSocketImpl.connect(Abstrac ...
- Day 4 - 搜索进阶与模拟
启发式搜索 下面将简要介绍启发式搜索及其用法. 定义 启发式搜索(英文:\(\text{heuristic search}\))是一种在普通搜索算法的基础上引入了启发式函数的搜索算法. 启发式函数的作 ...
- Geostudio简单实现边坡安全系数的计算
Geostudio是加拿大团队开发的用于岩土工程稳定性分析的一款工程软件,里面的安全系数的计算基本都是基于极限平衡法原理进行求解的,SLOPE/W模块用于安全系数的求解.SEEP/W模块考虑渗水作用. ...
- java spring boot 权限认证总结瞎记一通,各种 方案。附近如何运行jar包。和如何读配文件
在正式笔之 前先来思考如何将java 的包打包成jar 包同,运行时指定配置,这样运行, 以上问题有空在来研究,有空在来补这个文档 首先呢,先来说说Session 怎么使用,这个在sping boot ...
- 2023/4/21 SCRUM个人博客
1.我昨天的任务 学习信号和槽的定义并完善UI界面的基础知识 2.遇到了什么困难 难以理解design的设计理念 3.我今天的任务 学习如何使用QTdesign,并完善UI
- 全球2023年自然科学指数(Nature Index),各单位排名表
地址: https://www.nature.com/nature-index/annual-tables/2023/institution/all/all/global 自然科学指数(Nature ...