深聊自动化测试之:小鱼整理21条避坑指南,让你完美运行自动化

简介: 深聊自动化测试之:小鱼整理21条避坑指南,让你完美运行自动化

1、引言


在撸码过程中,99.1%的大佬,都不敢说自己的撸出来的代码,是不需要debug的。

换句话说,码农在撸码过程中,最痛苦的,莫过于撸出来的代码,又…


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

请各位大佬笑纳


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、页面元素封装时候,定位方式一定要写对,否则报错


定位方式是实现WebUI自动化的基础


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


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

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


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


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-12-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_DJ
@ time : 2020-12-19
"""
def __init__(self,dirver):
  Logger.__init__(self,'DJ')
  self.log=self.getlog()

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_DJ
@ time : 2020-12-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标准错误,报错内容


目录
相关文章
|
8天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)
【6月更文挑战第21天】本文介绍了TestNG中测试方法的依赖执行顺序。作者通过一个实际的自动化测试场景展示了如何设计测试用例:依次打开百度、搜索“selenium”、再搜索“selenium+java”。代码示例中,`@Test`注解的`dependsOnMethods`属性用于指定方法间的依赖,确保执行顺序。如果不设置依赖,TestNG会按方法名首字母排序执行。通过运行代码,验证了依赖关系的正确性。
31 4
|
9天前
|
机器人 测试技术 持续交付
现代软件测试中的自动化工具与策略
随着软件开发的快速发展,自动化测试成为提高软件质量和加快发布速度的关键。本文探讨了现代软件测试中自动化工具和策略的重要性及其应用,旨在帮助开发团队更有效地实施自动化测试,提升整体开发效率和产品质量。
|
3天前
|
XML 测试技术 数据格式
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(下)
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(下)
10 3
|
6天前
|
机器学习/深度学习 人工智能 算法
探索软件测试的未来:AI与自动化的交汇点
【6月更文挑战第22天】随着技术的不断进步,软件测试领域正迎来一场革命。人工智能(AI)和自动化技术的结合不仅提高了测试的效率和准确性,还为测试人员开辟了新的职业道路。本文将深入探讨AI和自动化如何改变软件测试的未来,并分析这些变化对测试专业人员的意义。
|
2天前
|
人工智能 测试技术 持续交付
探索软件测试的未来:AI与自动化的交汇点
【6月更文挑战第26天】本文旨在探讨软件测试领域的未来趋势,特别是人工智能(AI)和自动化技术如何改变传统的测试方法。通过分析当前测试实践的局限性,文章将阐述AI和自动化技术带来的创新解决方案,并讨论这些技术如何提高测试效率、准确性和可扩展性。最后,我们将展望这些技术发展对测试工程师角色的影响及其所需的技能转变。
|
3天前
|
机器学习/深度学习 人工智能 测试技术
探索软件测试的未来:AI与自动化的融合之路
本文旨在探讨在人工智能(AI)快速发展的背景下,软件测试领域如何适应这一变革,特别是AI与自动化测试的结合将如何重新定义质量保证流程。我们将分析当前测试实践面临的挑战,探讨AI技术如何提供解决方案,并预测未来可能的发展趋势。文章还将讨论实施AI驱动的自动化测试策略时应注意的事项,以及这些变化对测试人员技能要求的影响。
|
7天前
|
机器学习/深度学习 数据采集 人工智能
探索软件测试的未来:AI与自动化的融合之路
【6月更文挑战第21天】在软件测试领域,人工智能(AI)和自动化技术的结合被广泛认为是未来发展的关键。本文旨在深入探讨这一趋势,分析AI如何增强自动化测试的效率和有效性,同时指出实施过程中可能遇到的挑战和解决方案。通过具体案例分析,文章将展示AI在自动化测试中的应用,以及它如何改变软件测试工程师的工作方式。
28 6
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件测试的未来:自动化与AI的融合
在软件开发的生命周期中,测试一直扮演着关键角色。随着技术的发展,传统的软件测试方法正逐渐让位于自动化和人工智能(AI)技术。本文将探讨自动化测试的现状、挑战以及AI如何被整合进测试流程中,以提高测试效率和准确性。我们将通过实际案例分析,展示自动化测试工具和AI算法如何协同工作,以及它们对测试工程师技能要求的影响。最后,文章将预测这些技术发展对未来软件测试领域的潜在影响。
13 1
|
3天前
|
Java 测试技术 程序员
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(上)
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(上)
13 1
|
9天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(七十九)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-下篇(详解教程)
【6月更文挑战第20天】TestNG是一个Java测试框架,提供两种测试方法依赖机制:强依赖(所有前置方法成功后才运行)和弱依赖(即使前置方法失败,后置方法仍运行)。文中通过代码示例展示了这两种依赖如何实现,并解释了当依赖方法失败时,如何影响后续方法的执行。文章还包含了TestNG Suite的运行结果截图来辅助说明。
31 8