不再走弯路,自动化测试问题错误解决总结(问题+解决)全网最详细


前言

避坑内容总结

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

web自动化测试:https://www.bilibili.com/video/BV1MS4y1W79K/

解决方法:
1)查看自己的“属性值”是否写正确
2)元素的标签不唯一,默认找到第一个
3)向上查看,元素是否在frame或iframe框架中
4)查看元素是否在新打开的页面中,需要切换到新窗口
5)换其它的定位方式:id/name/class name/tag name/link text/xpath/css selector
6)检查元素属性是否是会变动的、是否是隐藏的
7)添加等待时间sleep(),implicitly_wait(),WebDriverWait(driver, 10, 1).until(定位的元素, messages)
8)查看标签的属性是否有“style=’display:none’->。元素不显示。属性改为block即可
9)查看标签的属性是否有‘οnclick=return false’->。取消点击。属性改为false即可
10)针对于后两种情况,修改js属性:

js="document.getElementById('title').style.display='block'"
driver.execute_script(js)

Indentation Error
遇到问题:
出现 Indentation Error

解决方法:
脚本代码对齐。
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 -*-
"""
@ time : 2023-3-15
"""
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

页面封装类中没有已定义函数的问题
提示没有该方法
遇到问题:
在调用baseView.py文件的公共方法,提示:没有该方法。

解决方法:
1)需要在baseView.py文件确认,是否已封装该方法。
2)导入的包/模块是否正确。

没有定义好的函数
遇到问题:
提示在页面封装类中没有baseView.py文件中定义好的函数。

解决方法:
①新建名字为module_baseView.pth文件,内容为“baseView.py文件”存放路径:例如(“E:\Progect”)。
② 进入python的安装目录,将文件放到python3\lib\sit-packages文件夹下。
③ 在测试用例中导入其他文件夹模块引入:import sys。
④ sys.path.append(“…”)。
⑤ from … import …

parater must be str
遇到问题:
出现”parater must be str“。
原因:
使用参数有问题。

解决方法:
①在封装页面元素定位方式时,经常会会遇到二次定位。
② 第一次定位调用基础类的方法,第二次定位就正常写就行了。
例如:

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

继承
继承,使我们减少代码冗余及代码高效的常用方式。
子集继承父级(不是继承银子)
老规矩,上例子:

"""
@ time : 2023-3-15
"""
def __init__(self,dirver):
  	Logger.__init__(self,'DJ')
  	self.log=self.getlog()
  	self.driver = driver

not all arguments curerted during string format
遇到问题:
打印输出时显示“not all arguments curerted during string format”
原因:
前后参数不对应。

解决方法:
调整前后参数,使其一致。

读取文件转码错误
遇到问题:
读取txt文件的汉子和字符是,打印出一串编码,如下:
(b’\xef\xbb\xbf\xe5\xa5\xbd\xe7\x9a\x84\r\n’)

解决办法:

"""
@ time : 2023-3-15
"""
x = open("test.txt","rb")
y = x.readlines()
for i in y:
  #追加utf8 格式
  j = i.decode('utf-8')
print(j)
x.close()

str object is not callable
遇到问题:
出现"“str object is not callable”
原因:
使用定义的变量名字与内置模块名字相同。

解决办法:
修改定义变量名。

开启多窗口无法定位到最后一个句柄
遇到问题:
开启多窗口,第一次得到的句柄列表为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])

Can not connect to the Service chromedriver
遇到问题:
提示 Can not connect to the Service chromedriver
原因:
chromedriver未被调用。

解决方法:
①python根目录存放chromedriver。
②hrome版本号与chromedriver版本号 要匹配。
③chromedriver追加到环境变量(Path)。
④运行脚本调用chromedriver。
⑤Firewalls 允许chromedriver运行。

文件路径配置
读取数据文件,尽量使用参数化,即 调用os模块:

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

文件改名与复制
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}"

调用脚本小技巧
技巧一
运行自动化脚本时,将鼠标放到屏幕中间或者下方,(有可能切换窗口时定位不到)。
大量脚本运行,一般我们都是在后台运行。
代码示例:

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标准错误,报错内容。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

如果你周围是一群鹰的话,那么你自己也会成为一只鹰;如果是在一群山雀中间的话,那么你就看不到海阔天空。

有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。永不满足是我向上的动力。

目标犹如海上的灯塔,指引前进的方向;目标犹如黑夜的火炬,照亮奋斗的路途;目标犹如航行的风帆,推进破浪的航程。

猜你喜欢

转载自blog.csdn.net/shuang_waiwai/article/details/129560277