pythonappium自动化框架_Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)...

简介

前边一直在分享testng的相关文章,看了点赞量和阅读数不是很高,宏哥猜测估计是大家确实是用不到或者不喜欢吧!不过宏哥经过一段时间的准备,appium的自动化测试框架完善的差不多了,那么接下来宏哥继续给小伙伴和童鞋们分享有关Appium自动化测试框架综合实践。想必小伙伴们有点等不及了吧!

driver配置封装

kyb_caps.yaml 配置表

主要是一些配置信息的封装。

参考代码

platformName: Android

#模拟器

platformVersion: 5.1.1

deviceName: 127.0.0.1:62025

#mx4真机

#platformVersion: 5.1

#udid: 750BBKL22GDN

#deviceName: MX4

appname: kaoyan3.1.0.apk

noReset: False

unicodeKeyboard: True

resetKeyboard: True

appPackage: com.tal.kaoyan

appActivity: com.tal.kaoyan.ui.activity.SplashActivity

ip: 127.0.0.1

port: 4723

desired_caps.py

主要是用来读取配置文件的信息的封装。

参考代码

# coding=utf-8

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。

'''

Created on 2019-11-14

@author: 北京-宏哥 QQ交流群:707699217

Project:Appium自动化测试框架综合实践 - 代码实现

'''

# 3.导入模块

from appium import webdriver

import yaml

import logging

import logging.config

import os

CON_LOG='../config/log.conf'

logging.config.fileConfig(CON_LOG)

logging=logging.getLogger()

def appium_desired():

with open('../config/kyb_caps.yaml','r',encoding='utf-8') as file:

data=yaml.load(file)

desired_caps={}

desired_caps['platformName']=data['platformName']

desired_caps['platformVersion']=data['platformVersion']

desired_caps['deviceName']=data['deviceName']

base_dir = os.path.dirname(os.path.dirname(__file__))

app_path = os.path.join(base_dir, 'app', data['appname'])

desired_caps['app']=app_path

desired_caps['appPackage']=data['appPackage']

desired_caps['appActivity']=data['appActivity']

desired_caps['noReset']=data['noReset']

desired_caps['unicodeKeyboard']=data['unicodeKeyboard']

desired_caps['resetKeyboard']=data['resetKeyboard']

logging.info('start app...')

driver=webdriver.Remote('http://'+str(data['ip'])+':'+str(data['port'])+'/wd/hub',desired_caps)

driver.implicitly_wait(8)

return driver

if __name__ == '__main__':

appium_desired()

# with open('../config/kyb_caps.yaml', 'r', encoding='utf-8') as file:

# data = yaml.load(file)

#

# base_dir=os.path.dirname(os.path.dirname(__file__))

# print(os.path.dirname(__file__))

# print(base_dir)

#

# app_path=os.path.join(base_dir,'app',data['appname'])

# print(app_path)

相对路径符号含义

“.”表示当前目录

“..” 表示当前目录的上一级目录。

“./”表示当前目录下的某个文件或文件夹,视后面跟着的名字而定

“../”表示当前目录上一级目录的文件或文件夹,视后面跟着的名字而定。

基类封装

baseView.py

主要是一些元素定位方法的封装。

参考代码

# coding=utf-8

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。

'''

Created on 2019-11-14

@author: 北京-宏哥 QQ交流群:707699217

Project:Appium自动化测试框架综合实践 - 代码实现

'''

# 3.导入模块

class BaseView(object):

def __init__(self,driver):

self.driver=driver

def find_element(self,*loc):

return self.driver.find_element(*loc)

def find_elements(self,*loc):

return self.driver.find_elements(*loc)

def get_window_size(self):

return self.driver.get_window_size()

def swipe(self,start_x, start_y, end_x, end_y, duration):

return self.driver.swipe(start_x, start_y, end_x, end_y, duration)

common公共模块封装

公共方法封装 : common_fun.py

主要是一些公共方法的封装。

参考代码

# coding=utf-8

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。

'''

Created on 2019-11-13

@author: 北京-宏哥 QQ交流群:707699217

Project:Appium自动化测试框架综合实践 - 代码实现

'''

# 3.导入模块

from kyb_testProject.baseView.baseView import BaseView

from kyb_testProject.common.desired_caps import appium_desired

from selenium.common.exceptions import NoSuchElementException

import logging

from selenium.webdriver.common.by import By

import time,os

import csv

class Common(BaseView):

cancelBtn=(By.ID,'android:id/button2')

skipBtn=(By.ID,'com.tal.kaoyan:id/tv_skip')

wemedia_cacel=(By.ID,'com.tal.kaoyan:id/view_wemedia_cacel')

def check_cancelBtn(self):

logging.info('==========check_cancelBtn=========')

try:

cancelBtn = self.driver.find_element(*self.cancelBtn)

except NoSuchElementException:

logging.info('no cancelBtn')

else:

cancelBtn.click()

def check_skipBtn(self):

logging.info('=========check skipBtn=============')

try:

skipBtn = self.driver.find_element(*self.skipBtn)

except NoSuchElementException:

logging.info('no skipBtn')

else:

skipBtn.click()

def get_size(self):

x = self.driver.get_window_size()['width']

y = self.driver.get_window_size()['height']

return x, y

def swipeLeft(self):

logging.info('swipeLeft')

l = self.get_size()

x1 = int(l[0] * 0.9)

y1 = int(l[1] * 0.5)

x2 = int(l[0] * 0.1)

self.swipe(x1, y1, x2, y1, 1000)

def getTime(self):

self.now=time.strftime("%Y-%m-%d %H_%M_%S")

return self.now

def getScreenShot(self,module):

time=self.getTime()

image_file=os.path.dirname(os.path.dirname(__file__))+'/screenshots/%s_%s.png' %(module,time)

logging.info('get %s screenshot' %module)

self.driver.get_screenshot_as_file(image_file)

def check_market_ad(self):

logging.info('====check_market_ad====')

try:

element=self.driver.find_element(*self.wemedia_cacel)

except NoSuchElementException:

pass

else:

logging.info('close market ad')

element.click()

def get_csv_data(self,csv_file,line):

logging.info('=====get_csv_data======')

with open(csv_file,'r',encoding='utf-8-sig') as file:

reader=csv.reader(file)

for index,row in enumerate(reader,1):

if index==line:

return row

if __name__ == '__main__':

# driver=appium_desired()

# com=Common(driver)

# com.check_cancelBtn()

# # com.check_skipBtn()

# com.swipeLeft()

# com.getScreenShot('startApp')

list = ["这", "是", "一个", "测试", "数据"]

# for i in range(len(list)):

# print(i, list[i])

list1 = ["这", "是", "一个", "测试", "数据"]

# for index, item in enumerate(list1):

# print(index, item)

小结

好了,今天的分享就到这里。感谢您耐心的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值