App自动化测试框架设计与实现

38 篇文章 6 订阅
23 篇文章 0 订阅


1.demo1.py

# 1.去登录考研帮系统
import time
from time import sleep

from appium import webdriver
#  用python代码去做app自动化 先要获取 app程序的手机信息
#  手机配置信息 我们统一写在info中
from class45.config.config_read import yaml_load

data2 = yaml_load.read_yaml()#3.调用yaml文件的数据
info = {
    #操作平台
    'platformName':'Android',
    #版本号
    'platformVersion':'7.1.2',
    #设备信息 可自由编写 不能为空 不能为中文
    'deviceName':'127.0.0.1:62001',
    # 包名
    'appPackage':'com.tal.kaoyan',
    #界面名/入口名
    #界面名 在这里要注意填写的界面名并不是app打开的第一页的字符码
    #当前包名和界面名获取的方式:cmd - adb shell dumpsys window | findstr mCurrentFocus
    # 获取入口名
    # 1.有apk的情况下获取包名和入口名 cmd - aapt dump badging 文件拖拽
    # 2.apk的包不见了,又想获取入口名,那我们可以通过monkey命令来获取
    # 1. adb shell pm list packages -3
    # 2. adb shell monkey -p 包名 -v-v-v 1
    # 其中onent的后面就是入口名 末尾的end不要带
    #有apk的
    'appActivity':'com.tal.kaoyan.ui.activity.SplashActivity',
    #重置
    'noReset':False
}

2.yaml文件

platformName: Android,
platformVersion: 7.1.2,
deviceName: 127.0.0.1:62001,
appPackage: com.tal.kaoyan,
appActivity: com.tal.kaoyan.ui.activity.SplashActivity,
noReset: False
ip: 127.0.0.1
port: 4723

3.读取yaml文件数据

# 专门读取yaml文件数据
# 第一步获取yaml文件中的参数
import yaml


class yaml_load:
    def read_yaml(self): #2.封装
        with open('../data/cs_caps.yaml','r',encoding='utf-8') as f: #6.导入yaml的文件绝对路径
            data = yaml.load(f,yaml.FullLoader)
            print(data)
            return data #2.返回
data2 = yaml_load().read_yaml()
print(data2)

4.放路径

# 5.专门放路径
import os
class Config:
    config_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)),'data')
    #5.5拿到yaml文件的绝对路径
    yaml_path = config_dir+'\cs_caps.yaml'
    print(yaml_path)

5.字典赋值

#7.我们配置信息的组成是一个字典,原来的字段我们无法进行传递参数 所以我们先创建一个空字段 然后给字典赋值
from appium import webdriver

from class45.config.config_read import yaml_load


def desired_caps():
    data = yaml_load().read_yaml() #7.获取文件的值
    print(data)
    info = {}
    info['platformName'] = data['platformName']
    info['platformVersion'] = data['platformVersion']
    info['deviceName'] = data['deviceName']
    info['appPackage'] = data['appPackage']
    info['appActivity'] = data['appActivity']
    info['noReset'] = data['noReset']
    driver = webdriver.Remote('http://'+str(data['ip'])+':'+str(data['port'])+'/wd/hub',info)

    driver.implicitly_wait(3)
    return driver

if __name__ == '__main__':
    desired_caps()

# 完成配置信息的优化后我们就可以直接在yaml文件去修改参数

6.专门封装取消滑动

# 9.专门封装取消跳过滑动
from selenium.webdriver.common.by import By

from class45.base.base_page import Base


class Common(Base):
    #10.3 Base中*loc所以我们元组
    cancel = (By.ID,'android:id/button2') #10.4点击取消 元素获取用的ID
    skip = (By.ID,'com.tal.kaoyan:id/tv_skip')

    #10.封装点击取消
    def check_cancel(self):
        # 10.1 调用点击的方法,需要去继承Base的方法
        try: #10.5因为不确定有没有取消点击,所以使用
            self.click(self) #10.8把点击跳过的元素传入到click
        except Exception as e:
            print('没有取消元素')

    # 10.6封装跳过
    def check_skip(self):
        try:
            self.click(self)
        except Exception as e:
            print('没有跳过的元素')


    #11.封装滑动 需要拆分两步,1.获取手机大小 2.设置的时候设置xy计算百分比
    #11.1封装屏幕大小
    def size(self):
        x = self.driver.get_window_size()['width']
        y = self.driver.get_window_size()['height']
        return x,y

    #11.2向左封装滑动
    def swipeLeft(self,n,t):
        size2 = self.size()
        x1 = size2[0]*0.8
        y1 = size2[0]*0.9
        x2 = size2[0]*0.2
        for i in range(n):
            self.driver.swipe(x1,y1.x2,y1,t)

#9.1先找到取消、跳过的元素才能点击 所有我们提前封装好base 也就是基类或项目中经常要用的操作,封装在里面

7.封装经常要使用的动作

#10. 在这封装经常要使用的动作
from selenium.webdriver.support.wait import WebDriverWait


class Base:
    def __init__(self,driver):
        self.driver = driver
        # 10.找到元素并且设置显示等待

    def locator(self,loc,timeout=10,poll=0.5): #loc要找的元素 timeout:总等待时长 poll:查看间隔
        WebDriverWait(self.driver,timeout,poll).until(lambda x:x.find_element(*loc))
        #10 输入的方法
    def input_(self,loc,text):
        self.locator(loc).send_keys(text)
        #10.点击的方法
    def click(self,loc):
        self.locator(loc).click()

8.登录封装

#12.实现登录 输入用户名 输入密码 点击登录
#12.1 其实还有取消 跳过的业务 继承就可以了
from selenium.webdriver.common.by import By

from class45.common.common_fun import Common
from class45.desired.desired_cap import desired_caps


class LoginView(Common): #在登录操作中有点击跳过的操作 所以我们继承common -Base
    #12.2 账号的输入框 元素
    global username_type = (By.ID,'com.tal.kaoyan:id/login_email_edittext')
    #12.2 密码的输入框 元素
    global password_type = (By.ID,'com.tal.kaoyan:id/login_password_edittext')
    #12.2 登录按钮 元素
    global loginBtn = (By.ID,'com.tal.kaoyan:id/login_login_btn')

    #12.3 封装登录流程
    def login(self,username,password):
        self.check_cancel() #点击取消
        self.check_skip() #点击跳过
        self.input_(self,username_type,username)
        self.input_(self,password_type,password)
        self.click(self,loginBtn)

    # 13 扩展
    # 13.1 我知道了
    know = (By.ID, '')
    # 13.1下线提醒
    warning2 = (By.ID, '')
    # 13 点击我知道
    def check_alter(self):
        print('检查弹窗知道了')
        try:
            self.click(self.know)
        except Exception as e:
            print('没有我知道')

    def check_alter(self):
        print('检查下线提醒')
        try:
            self.click(self.warning2)
        except Exception as e:
            print('没有下线提醒')


#12.4 查看登录有没有问题
if __name__ == '__main__':
    driver = desired_caps()
    lp = LoginView(driver)
    lp.login('qwerty2664','qwerty123')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司小幽

真诚赞赏,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值