• 这21条避坑指南,让你完美运行自动化


    引言

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

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

    为了能避坑,我也是在撸码过程中,总结的一点避坑方法,请各位大佬笑纳。

    无法定位到元素

    遇到问题:找不到元素,脚本报“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即可;

    针对于后两种情况,修改js属性:

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

    Indentation Error

    遇到问题:出现 Indentation Error。

    解决方法:脚本代码对齐。

    PO设计模式类

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

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

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

    Page.__init__(self,driver)
    
    • 1

    4、页面元素封装时候,定位方式一定要写对,否则报错,定位方式是实现WebUI自动化的基础。

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

    def __init__(self,driver):
      Page.__init__(self,driver)
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    提示没有该方法

    遇到问题:调用baseView.py文件的公共方法,提示没有该方法。

    解决方法:

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

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

    没有定义好的函数

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

    解决方法:

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

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

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

    4、sys.path.append(“…”)。

    5、from … import …。

    parater must be str

    遇到问题:出现”parater must be str“。

    原因:使用参数有问题。

    解决方法:

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

    2、第一次定位调用基础类的方法,第二次定位就正常写就行了,例如:

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

    继承

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

    子集继承父级(不是继承银子),老规矩,上例子:

    """
    @ auth : carl_DJ
    @ time : 2020-12-19
    """
    
    def __init__(self,dirver):
      Logger.__init__(self,'DJ')
      self.log=self.getlog()
      self.driver = driver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    打印输出时错误

    遇到问题:打印输出时显示“not all arguments curerted during string format”。

    原因:前后参数不对应。

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

    读取文件转码错误

    遇到问题:读取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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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] 
    
    • 1

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

    driver.switch_to.window(c[0]) 
    
    • 1

    无法连接

    遇到问题:提示 Can not connect to the Service chromedriver。

    原因:chromedriver未被调用。

    解决方法:

    1、python根目录存放chromedriver。

    2、hrome版本号与chromedriver版本号 要匹配。

    3、chromedriver追加到环境变量(Path)。

    4、运行脚本调用chromedriver。

    5、Firewalls 允许chromedriver运行。

    文件路径配置

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

    import os
    
    data_dir = os.path.dirname(os.path.abspath(__file__))
    file_path = os.path.join(data_dir,'data1.txt')
    
    • 1
    • 2
    • 3
    • 4

    文件改名与复制

    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}"
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    调用脚本小技巧

    技巧一

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

    代码示例:

    options = webdriver.ChromeOptions()
    options.add_argument('headless')
    driver = webdriver.Chrome(options=options)
    
    • 1
    • 2
    • 3

    技巧二

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

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

    参数说明

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

    2>&1:

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

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

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

    最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

    在这里插入图片描述

    这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

    如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

    敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

    自学推荐B站视频:

    零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

    自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

    在这里插入图片描述

  • 相关阅读:
    【小程序项目开发-- 京东商城】uni-app之商品列表页面 (上)
    使用SpringBoot和ZXing实现二维码生成与解析
    第七章:java Object类
    Mysql
    OpenGL —— 2.7、绘制多个自旋转的贴图正方体(附源码,glfw+glad)
    小白参加红队,需要做好哪些准备?
    Docker部署前后端服务示例
    Vue 3 组合式编程:革新前端开发的新时代
    2022 CSP-J2 CSP-S2 第2轮 视频及相关资料
    《web课程设计》基于HTML+CSS+JavaScript典的中医药大学网(11个页面)
  • 原文地址:https://blog.csdn.net/xfw17397388089/article/details/126318959