熬夜整理21条避坑指南,细聊该如何让自动化完美运行!

news2025/2/23 18:08:26

目录

1、引言

2、避坑内容总结

2.1无法定位到元素

2.2 Indentation Error

2.3 PO设计模式类

2.4 页面封装类中没有已定义函数的问题

2.4.1 提示没有该方法

2.4.2 没有定义好的函数

2.5 parater must be str

2.6 继承

2.7 not all arguments curerted during string format

2.8 读取文件转码错误

2.10 开启多窗口无法定位到最后一个句柄

2.11 Can not connect to the Service chromedriver

2.12 文件路径配置

2.13 文件改名与复制

2.14 调用脚本小技巧


1、引言

自动化测试的重要性越来越受到人们的重视,因为它可以提高测试效率、降低测试成本并减少人为错误的出现。为了满足这个需求,越来越多的公司开始采用自动化测试来保证软件质量。

为了能避坑,博主也是在撸码过程中,总结的一点避坑方法,

请各位大佬笑纳

2、避坑内容总结

2.1无法定位到元素

遇到问题:

找不到元素,脚本报“NoSuchElementException:Unable to find element”,或"定位到了,不能操作,点击无效

解决方法:

 - 查看自己的“属性值”是否写正确

 - 元素的标签不唯一,默认找到第一个

 - 向上查看,元素是否在frame或iframe框架中

 - 查看元素是否在新打开的页面中,需要切换到新窗口

 - 换其它的定位方式:id/name/class name/tag name/link text/xpath/css selector

 - 检查元素属性是否是会变动的、是否是隐藏的

 - 添加等待时间sleep(),implicitly_wait(),WebDriverWait(driver, 10, 1).until(定位的元素, messages)

 - 查看标签的属性是否有“style=’display:none’->。元素不显示。属性改为block即可

 - 查看标签的属性是否有‘οnclick=return false’->。取消点击。属性改为false即可

 - 针对于9和8这两种情况,修改js属性:

js=”document.getElementById(‘title‘).style.display=’block’”
driver.execute_script(js)

2.2 Indentation Error

遇到问题:

出现 Indentation Error

解决方法

脚本代码对其

2.3 PO设计模式类

    1、使用PO设计模式封装页面元素类,需要有初始化函数"init"

    2、页面元素调用Page类时候,Page函数,后面括号的“self”不用写

    3、Page的初始化包含(self,driver)两个元素,在页面封装类中,初始化中调用方式为

Page.__init__(self,driver)

    4、页面元素封装时候,定位方式一定要写对,否则报错

    5、在页面封装中,类的初始化使用如下样式:

def __init__(self,driver):
Page.__init__(self,driver)

    6、类中定义变量,比如x=“hello”,调用时使用:self.x

    7、在testcase中调用已封装的并且实例化的类时,在testcase中定义函数,不需要写self。

# -*- coding: utf-8 -*-
"""
@ auth : Carl_奕然
@ time : 2022-02-19
"""
def test_pmlogin(self):
try:
driver = self.driver
pm = Login(driver)
pm.strat()
pm.login_home()
pm.login_username('admin')
pm.login_password('8888888')
pm.login_click()
time.sleep(2)
pm.quit()
except Exception as e:
logging.info(f"login in failed {e}")
pm.quit()

2.4 页面封装类中没有已定义函数的问题

2.4.1 提示没有该方法

遇到问题

    在调用baseView.py文件的公共方法,提示:没有该方法

解决方法

    1.需要在baseView.py文件确认,是否已封装该方法

    2.导入的包/模块是否正确

2.4.2 没有定义好的函数

遇到问题

    提示在页面封装类中没有baseView.py文件中定义好的函数

解决方法

    ①新建名字为module_baseView.pth文件,内容为“baseView.py文件”存放路径:例如(“E:\Progect”)

    ② 进入python的安装目录,将文件放到python3\lib\sit-packages文件夹下

    ③ 在测试用例中导入其他文件夹模块引入:import sys

    ④ sys.path.append(“…”)

    ⑤ from … import …

2.5 parater must be str

遇到问题

    出现”parater must be str“

原因

    使用参数有问题

解决方法

    ①在封装页面元素定位方式时,经常会会遇到二次定位

    ② 第一次定位调用基础类的方法,第二次定位就正常写就行了,

    例如:

x=self.find_element(locu).find_element(By.ID,'locu')

2.6 继承

继承,使我们减少代码冗余及代码高效的常用方式。

子集继承父级(不是继承银子)

老规矩,上例子

"""
@ auth : Carl_奕然
@ time : 2022-02-19
"""
def __init__(self,dirver):
Logger.__init__(self,'DJ')
self.log=self.getlog()
self.driver = driver

2.7 not all arguments curerted during string format

遇到问题

    打印输出时显示“not all arguments curerted during string format”

原因

    前后参数不对应

解决方法

    调整前后参数,使其一致

2.8 读取文件转码错误

遇到问题

    读取txt文件的汉子和字符是,打印出一串编码,如下:

        

(b’\xef\xbb\xbf\xe5\xa5\xbd\xe7\x9a\x84\r\n’)

解决办法

"""
@ auth : Carl_奕然
@ time : 2022-02-19
"""
x = open("test.txt","rb")
y = x.readlines()
for i in y:
#追加utf8 格式
j = i.decode('utf-8')
print(j)
x.close()

2.9 str object is not callable

遇到问题

    出现"“str object is not callable”

原因

    使用定义的变量名字与内置模块名字相同

解决办法

    修改定义变量名

2.10 开启多窗口无法定位到最后一个句柄

遇到问题

    开启多窗口,第一次得到的句柄列表为a=[1,2],第二次得到的句柄列表是b=[1,3,2],按照顺序排序,要切换到句柄3?

解决方法

首先把a和b变成集合,再取b不同于a的元素

  
  c=list(set(b)-set(a))=[3]

然后再转换为列表赋值给变量c

driver.switch_to.window(c[0])

2.11 Can not connect to the Service chromedriver

遇到问题

提示 Can not connect to the Service chromedriver

原因

chromedriver未被调用

解决方法

    ①python根目录存放chromedriver

    ②hrome版本号与chromedriver版本号 要匹配

    ③chromedriver追加到环境变量(Path)

    ④运行脚本调用chromedriver

    ⑤Firewalls 允许chromedriver运行

2.12 文件路径配置

读取数据文件,尽量使用参数化,即 调用os模块

import os
data_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(data_dir,'data1.txt')

2.13 文件改名与复制

python对文件进行"改名"和"复制"

#引入os模块
import os
data_dir = os.path.dirname(os.path.abspath(__file__))
old_file = os.path.join(data_dir,'data.txt')
new_file = os.path.join(data_dir,'new_data.txt')
#改名
os.rename(old_file,new_file)
#复制
os.system(f"copy {old_file},{new_file}")

2.14 调用脚本小技巧

技巧一

    运行自动化脚本时,将鼠标放到屏幕中间或者下方,(有可能切换窗口时定位不到)

    大量脚本运行,一般我们都是在后台运行

代码示例

options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(options=options)

技巧二

cmd窗口,直接把结果写入文本

#测试报告
python allrun.py >>replor.html 
#log
nohup python my.py >> ../python/logfile/run.log 2>&1

参数说明

nuhup:是no hang up的缩写,即不挂断运行

2>&1:

    0: 表示stdin标准输入,用户键盘输入的内容

    1 表示stdout标准输出,输出到显示屏的内容

    2 表示stderr标准错误,报错内容

 

作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可:【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=1MDs4T0SvhL4arRoq3njIVb9HGXrRoj6&authKey=sx1h5dj77OV5obrcx6nE7Dn3sqEVuE4XrGqzqneReBJy3ojOL3oHMSH48XPKPWhW&noverify=0&group_code=574737577

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端web自动化测试:selenium怎么实现关键字驱动

要做 ui 自动化测试,使用关键字驱动可以说是必须会的一种测试方式,它既可以在纯代码的自动化程序中运行,也可以在测试平台中使用。 使用纯代码方式时,自动化工程师先写好一个通用的程序,其他手工测试人员只需要把执行…

Python 中文编码

Python 文件中如果未指定编码,在执行过程会出现报错: #!/usr/bin/python print (“你好,世界”) 以上程序执行输出结果为: File “test.py”, line 2 SyntaxError: Non-ASCII character ‘\xe4’ in file test.py on line 2, b…

接口自动化测试:Python+Pytest+Requests+Allure

本项目实现了对Daily Cost的接口测试: PythonRequests 发送和处理HTTP协议的请求接口Pytest 作为测试执行器YAML 管理测试数据Allure 来生成测试报告。 本项目是参考了pytestDemo做了自己的实现。 1. 项目结构及安装部署 项目结构 api: 接口封装层,…

未来软件测试的5个主要趋势以及软件测试进阶路线

全球各地的企业每天都在发展变化着,以应对市场挑战,满足日益成熟的客户需求。即使是正在进行的技术进步也会使软件测试专家在实践的过程中更加专注和精确。 2021年给软件测试领域带来了新的技术解决方案,以及质量保证和软件测试的实现。与此同…

无线蓝牙耳机哪个品牌好?十款精选的无线蓝牙耳机品牌推荐

蓝牙耳机是一种无线耳机,其通过蓝牙技术与其他设备进行连接,例如手机、电脑、平板电脑等。蓝牙耳机使得用户可以在不受线缆限制的情况下享受音频体验,而且还可以方便地进行通话,目前市场上有许多不同种类和品牌的蓝牙耳机&#xf…

如何利用Python爬虫抓取某眼查网站中的q业信息?

部分数据来源:ChatGPT 引言: 最近在朋友圈看到了一个Python爬虫兼职的机会,但是由于一些原因我没有接到,于是我自己写了一个某眼查搜索结果爬取的Python脚本。下面将分享这个脚本的详细使用教程。 背景 某眼查是一家经营企业信用信息服务的公司,可以通过其网站查询公司信…

ChimeraX - 修改 Multimer 中单链的显示颜色

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131087434 ChimeraX 软件是一款用于分子可视化和分析的先进工具,可以处理大型数据集,支持多种格式,提…

什么是内存溢出?什么是内存泄露?

文章目录 一、什么是内存溢出? 二、什么是内存泄露? 三、如何避免内存溢出和内存泄露? 一、什么是内存溢出? 假设我们JVM中可用的内存空间只有3M,但是我们要创建一个5M的对象,那么新创建的对象就放不进去了…

十四、混合

第一部分 概念: 1) 引入 OpenGL ES 混合本质上是将 2 个片元的颜色进行调和,产生一个新的颜色。OpenGL ES 混合发生在片元通过各项测试之后,准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值,不再是新…

07SpringCloud Gateway服务网关

目标 目标 1、服务网关 Gateway 2、ServerWebExchange 3、Gateway使用Bucket4j限流 服务网关Gateway API 网关是一个服务,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API 网关封装了系统内部架构,为每个客户端提供一…

数据湖和数据仓库区别介绍

从数据仓库到数据湖 仓库和湖泊 仓库是人为提前建造好的,有货架,还有过道,并且还可以进一步为放置到货架的物品指定位置。 而湖泊是液态的,是不断变化的、没有固定形态的,基本上是没有结构的,湖泊可以是由…

项目上线出Bug!为什么你作为测试没测出来?

材料收集 你服务于一个数据库查询业务,某次客户现场反馈查询某个语句长时间未返回结果,耗时已经远远超过项目对外提供的性能报告承诺给用户最长查询时间。 问题和相关日志已经传递回来,开发人员进行原因分析和故障修复,测试人员进…

Ubuntu系统denyhosts的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、denyhosts是什么?二、安装denyhosts1.下载安装包2.安装3.配置4.启动5.测试 总结 前言 今天服务器又被攻击了,防火墙也打开了&#…

劝退忠告:外包实在是太坑了,划水三年,感觉人都废了

先说一下自己的情况,专科生,19年通过校招进入杭州某个外包软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

Linux使用者必备-13款厉害到让人怒赞的工具大揭秘

本文介绍几款 Linux 运维比较实用的工具,希望对 Linux 管理员有所帮助。 1、查看进程占用带宽情况-Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。 下载:http://sourceforge.net/projects/nethogs/files/nethogs…

【MVS+DepthFilter】video-based real-time multi view stereo

1.SVO 半直接视觉里程计 2. SVO2系列之深度滤波DepthFilter 3. SVO(SVO: fast semi-direct monocular visual odometry) 4. svo_note 5. MVSDepthFilter: video-based real-time multi view stereo 6. 作者George Vogiatzis主页 video-based real-time m…

Java版Spring cloud 企业电子招投标系统源码

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…

Pytorch版本的Ernie Health源码详解

Pytorch版本的Ernie Health源码详解 一、目录架构 二、尝试使用Ernie Health import torch # 查看torch版本 torch.__version__ 1.12.0cpu# 查看设备是否有GPU资源 # device torch.device(cuda:0 if torch.cuda.is_available() else cpu) device cuda if torch.cuda.is_ava…

I.MX6ULL_Linux_驱动篇(37) linux系统定时器

定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。 Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数…

Python selenium爬取影评生成词云图

文章目录 问题描述效果截图如下问题分析前期准备完整代码及解释字体素材 问题描述 通过中文分词、过滤停用词、生成词云图等步骤对评论数据进行处理和可视化。 效果截图如下 非常nice 问题分析 该程序需要使用 Selenium 库来模拟浏览器操作,因此需要下载安装 Chr…