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

目录:

一、上传文件(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. SpringBoot 校验post请求参数

    导读 前后端分离项目中,前端往后端传值时,后端都要做参数格式校验,比如校验数字最大值.最小值.是否允许为空.日期格式等等. 添加依赖 <!-- 参数校验 --> <dependenc ...

  2. Java 中的泛型 集合(List,Set) Map

    泛型 集合(List,Set) Map 泛型 泛型的本质是参数化类型,即允许在编译时对集合进行类型检查,从而避免安全问题,提高代码的复用性 泛型的具体定义与作用 定义:泛型是一种在编译阶段进行类型检查 ...

  3. 【PHP】关于fastadmin框架中使用with进行连表查询时setEagerlyType字段的理解

    前言 FastAdmin是我第一个接触的后台管理系统框架.FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常 ...

  4. 很好用的SSH工具FinalShell

    上图片:1.远程连接Linux 2.Linux:CentOS 3.虚拟机:

  5. webpack4.15.1 学习笔记(七) — 懒加载(Lazy Loading)

    懒加载或者按需加载,是一种很好的优化网页或应用的方式.实际上是先把代码在一些逻辑断点处分离开,然后在一些代码块中完成某些操作后,立即引用或引用另外一些新的代码块.这样加快了应用的初始加载速度,减轻了它 ...

  6. [oeasy]python0037_字符画艺术_asciiview_自制小动物_imagick_asciiart

    ​ 牛说(cowsay) 回忆上次内容 我们狂飙了一路 从用shell 直接执行 python程序 到用shell 循环执行 python程序 循环体中 把 python的 输出结果 用管道 交给了 ...

  7. Python爬虫Post请求返回值为-1000

    今天写了一个简单的爬虫程序,为了爬取kfc官网的餐厅数据,代码如下 # ajax的post请求--肯德基官网 def create_request(page): url='http://www.kfc ...

  8. 学习笔记--Java面向对象的继承

    Java面向对象的继承 继承 继承是面向对象的三大特性之一 继承基本作用:代码复用:重要作用:有了继承才能有以后的"方法的覆盖"和"多态" 继承语法格式: [修 ...

  9. 【ue源码】定制-蓝图部分

    今天在更新UE的伤害系统的时候出现了一个问题: 多个地方频繁调用一个函数,而这个函数肯定做优化,具体就是,把对应数据放入到队列,另外一个地方慢慢消费这个队列, 那么问题出现了,我使用的UE只有Sing ...

  10. Hbaseshell命令中的一些语法

    help 'xx' 看库list_namespace 看表list 建表create 't1','f1' 写数据put 't1','r1','c1:name','value' 读数据一行get 't1 ...