深聊自动化测试之:小鱼整理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天前
|
敏捷开发 测试技术 持续交付
探索软件测试中的自动化与持续集成
在快速迭代的软件开发环境中,自动化测试和持续集成(CI)已成为确保产品质量和加速交付的关键策略。本文将深入探讨自动化测试的基本原理、实施步骤以及它如何与持续集成流程相结合,以提高软件开发的效率和可靠性。我们将通过实际案例分析,展示自动化测试和CI的最佳实践,以及它们如何帮助企业实现更快的市场响应时间和更高的客户满意度。
45 16
|
10天前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成:提升效率与质量的关键
在快节奏的软件开发环境中,自动化测试和持续集成已经成为不可或缺的部分。本文将探讨自动化测试和持续集成的重要性,以及它们如何协同工作以提高软件开发的效率和质量。通过分析自动化测试的策略、工具选择以及持续集成的实践,我们将揭示这些技术如何帮助开发团队快速响应变化,减少错误,并加速产品上市时间。
|
9天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
31 4
|
9天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
15天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
16天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
58 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
5天前
|
敏捷开发 Java 测试技术
软件测试中的自动化策略与实践
在快速迭代的软件开发周期中,自动化测试是确保产品质量和提升开发效率的关键。本文将深入探讨自动化测试的重要性,介绍实用的自动化测试框架,并通过一个具体的代码示例,说明如何实现一个简单的自动化测试脚本。
25 12
|
12天前
|
测试技术 持续交付 Docker
探索软件测试中的自动化策略与挑战
在当今快节奏的软件开发周期中,自动化测试已成为提高产品质量和缩短上市时间的关键。然而,实施有效的自动化测试策略并非易事,它面临着技术选型、脚本维护、环境配置等一系列挑战。本文深入探讨了自动化测试的重要性,分析了常见的自动化测试工具和框架,并讨论了在构建和维护自动化测试体系过程中遇到的主要难题及其解决方案。通过案例分析,本文旨在为软件测试工程师提供实用的指导和建议,以优化他们的自动化测试实践。
|
14天前
|
jenkins 测试技术 持续交付
探索软件测试中的自动化与持续集成
本文深入探讨了软件测试领域中自动化测试和持续集成的融合应用,分析了这种结合如何提升软件开发的效率和质量。通过具体案例分析,展示了自动化测试和持续集成在软件开发生命周期中的关键作用及其实施策略。
|
15天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####
下一篇
无影云桌面