• 0
  • 0
分享
  • 这21条避坑指南,让你完美运行自动化!——软件测试圈
  • 恬恬圈 2023-04-07 16:36:52 字数 4215 阅读 1458 收藏 0

  1、引言

  在撸码过程中,99.1%的大佬,都不敢说自己的撸出来的代码,是不需要debug的。换句话说,码农在撸码过程中,最痛苦的,莫过于撸出来的代码,为了能避坑,小鱼也是在撸码过程中,总结的一点避坑方法,请各位大佬笑纳。

  2、避坑内容总结

  2.1无法定位到元素

  遇到问题:

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

  解决方法:

  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)

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



作者:Carl_奕然    

来源:http://www.51testing.com/html/58/n-7792658.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   摘 要  喂,你那个刚测好的页面怎么又出现了bug?这里怎么交互几次页面重绘就出了问题?你到底对前端测试用例的覆盖率有几分把握,真的没有测试遗漏嘛?对于这些疑问,正在看文章的你如果能够轻松应对,那么请关掉屏幕,本文与你关系不大,出去运动一下吧。但如果你也有类似的困惑,并且正在寻找衡量js代码测试完整度的方法,那么请继续阅读,文中介绍的js覆盖率工具会让你在完善前端测试用例的征途上,走的轻松一些。  正 文  众所周知,前端测试需求多、改动大,业务逻辑复杂又紧密,往往首轮设计的测试用例并不能完全覆盖所有的功能点和diff代码。这时,就需要代码覆盖率工具帮助我们发现测试未能覆盖到的代码分支和逻...
            1 0 1981
            分享
          •   现在国内测试行业的断层实际上非常严重,不论是从公司角度,还是从测试行业角度。关于测试人的职业发展,相信每个人都有自己的深刻体会,特别是“老一点“的,又不在互联网大厂的测试人员。  本文针对几个测试同学普遍关注的典型问题,整理了测试专家刘晓光老师的解答,供大家交流探讨。  Question  1、测试技能的提高主要是依托于公司平台,还是个人外部自学能力?  2、国内大部分公司对测试职能是普遍低估的,如何让领导重视,提高测试的地位?  3、测试也细分了很多专项测试,从个人发展角度,专项测试 or 全面的系统测试,哪个更符合未来职业发展要求?  4、现在火热的测试开发(能力超高)是否已经脱离了测...
            0 0 1188
            分享
          • 【聚合概念】相关偶然聚合:模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系逻辑聚合:模块内部的各个组成在逻辑上具有相似的处理动作,但功能用途上彼此无关时间聚合:模块内部的各个组成部分所包含的处理动作必须在同一时间内执行过程聚合:模块内部的各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行通信聚合:模块的各个组成部分所完成的动作都使用了同一个数据或产生同一输出数据顺序聚合:模块内部的各个部分,前一部分处理动作的最后输出是后一部分处理动作的输入功能聚合:模块内部各个部分全部属于一个整体,并执行同一功能,且各部分对实现该功能都必不可 【耦合概念】相关数据耦合:指两个...
            0 0 1734
            分享
          • 又一家造车新势力面临困境。12月7日,李一男创办的自游家宣布首款汽车短期内无法交付。在无法解决造车资质之下,虽然头顶“前华为太子”、“华为叛将”、“天才少年”等光环,李一男似乎也无力回天。从华为出走之后,李一男先后尝试了职业经理人、投资人等角色,甚至还一度锒铛入狱。造车是他出狱后的首个创业项目,也被外界视为最后一个,但命运似乎又给这位已经52岁的“天才少年”开了一个玩笑。与前两年的造车热潮相比,今年的新能源汽车行业正在回归市场竞争的理性,能者上,劣者汰,一切似乎也没什么奇怪。破碎的造车梦几天前还在辟谣倒闭传闻的自游家汽车,12月7日正式宣布首款车型NV在短期内将无法交付,将对用户全额退款。重出...
            0 0 1101
            分享
          •   概述  简历的中上部是最关键的位置,因为这个地方是HR重点关注的,需要把最重要的内容放到这个位置上,才能提升简历投递的成功率。  HR其实只要大概了解候选人的一些基本情况就能知道候选人是否能进入面试环节,她并不需要跟真正的用人部门的面试官那样,需要知道很多细节。另外HR在简历上的停留时间,平均来看,不会超过30秒,如果刚好业务部门急着招人,一直催着HR,那HR可能就只会用10秒来看看候选人的简历是否符合。如果你不将最重要的内容放在简历的中上部呈现的话,简历投递成功率会大大降低的。  个人基本信息需要放在最顶端  个人基本信息是必填的部分,虽然它不是最重要的内容,但是还是需要放在简历的最顶端...
            0 0 512
            分享
      • 51testing软件测试圈微信