美文网首页
应用腾讯课堂测试小样

应用腾讯课堂测试小样

作者: 流鼻涕的绿恐龙 | 来源:发表于2019-07-26 22:31 被阅读0次

    公司项目结构缩影

    项目目录下的结构

    .
    ├── __init__.py  # python包的标识
    ├── config   # 基础配置脚本
    │   └── settings.py 
    ├── data  # 存放测试数据
    │   └── __init__.py
    ├── doc  # 测试项目相关文档,以便于后期维护、新员工参阅
    ├── element  # 存放定位元素
    │   └── until.yaml  # 定位元素yaml文件
    ├── logs  # 测试脚本运行生成的日志文件
    ├── src  # pytest测试用例存放路径
    └── until  # 存放一些公共函数、脚本
        └── __init__.py
    
    7 directories, 5 files
    

    执行pytest后,会自动生成一个pytest相关文件,执行allure会生成一个报告文件,初次创建项目,因此这里没有体现两个该项目

    实现腾讯课堂底部导航的跳转

    第一步: 定位相关元素

    分析需要定位的元素

    图一.png

    分析图一可知,编号2中表示的是首页这个控件在xml布局中的元素位置,编号3中clickable属性为true,说明该元素是可以被点击的

    前几篇文章中有提到:“定位规则,优先使用ID定位,其次使用class定位,class一般情况下是不唯一的”,那么问题来了,如何定位不唯一的元素

    定位不唯一的元素的核心思想

    寻找上级能唯一标识自己的父级元素

    实践一下

    图二.png
    分析图二:
    红色方框内是第一个被绿色框起来的是我们需要的定位元素,该元素没有ID,那么有人会说:“我会xpath,用xpath不就好了吗?”我只能告诉你,呵呵哒!这个是安卓的原生控件,你的xpath在这里用不鸟喽!
    这种情景只能乖乖滴使用层级定位方法解决问题
    首先确认上一级元素是否可以唯一,不是唯一的继续往上找,根据我的经验一般不超过三级,就可以找到唯一标识自己的元素
    如图二:编号1的id是唯一的,编号2的class属性不是唯一的,编号3中的第一个绿色框是我们想要的元素
    结论:“现根据id定位,再根据class定位,多个class属性,没办法只能数数啦”

    第二步:将定位元素保存到yaml文件中

    自动化测试的核心思想之一:页面分离,“有时间再絮叨”
    yaml文件内容

    nav: 
     - com.tencent.edu:id/fa
     - android.widget.LinearLayout
    

    读取yaml文件的python函数代码

    import yaml
    def read_yaml():
        with open('/xxx.yaml', 'r') as fb:
            print(yaml.load(fb))  #输出的结果是{'nav': ['com.tencent.edu:id/fa', 'android.widget.LinearLayout']}  
            
            return yaml.load(fb)  #字典的形式
    
    read_yaml()
    

    yaml非python内置模块,需要下载 命令:pip install PyYAML

    第三步:编写功能逻辑代码

    from appium import webdriver
    from time import sleep
    import yaml
    
    
    def read_yaml():
        with open('xxx.yaml', 'r') as fb:
            return yaml.load(fb)
    
    
    el = read_yaml()['nav']
    
    
    class TestKe(object):
        def __init__(self):
            self.d = {
                "device": "android",
                "platformName": "Android",
                "platformVersion": "9",
                "deviceName": "46HDU19314003325",
                "appPackage": "com.tencent.edu",
                "appActivity": ".module.SplashActivity",
                "noReset": "true"
            }
            self.dr = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=self.d)
            sleep(2.5)  # 为什么要写入休眠时间?
    
        def change_nav(self):
            a = self.dr.find_element_by_id(el[0]).find_element_by_class_name(el[1]).find_elements_by_class_name(el[1])
            # 0、2、4、6为可点击的元素对象,所以代码这样写
            for i in range(0, len(a), 2):
                a[i].click()
    
    
    if __name__ == '__main__':
        t = TestKe()
        t.change_nav()
    

    生成测试报告

    先卖个关子,后期再说,本小记先到此

    小记结语

    为什么要添加休眠时间?休眠时间有几种方法?先让自己的程序跑起来,再考虑优化的问题,这就是一种进步!!!

    相关文章

      网友评论

          本文标题:应用腾讯课堂测试小样

          本文链接:https://www.haomeiwen.com/subject/rygrrctx.html