1.创建一个case包,start_app的python文件

#coding=utf-8from appium import webdriverfrom util.read_init import ReadInifrom util.get_by_local import GetByloaclimport timedef get_driver():    desc={        "platformName":"Android",        "platformVersion":"5.1.1",        "deviceName":"emulator-5554",        "appPackage":"com.tencent.mobileqq",        "appActivity":".activity.SplashActivity",        "noReset":"True"

    }    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desc)    return driver

def get_click():    get_by_local=GetByloacl(driver)    get_by_local.get_element('click').click()    time.sleep(1)    get_by_local.get_element('username').send_keys('11111')    get_by_local.get_element('password').send_keys('22222')

driver=get_driver()get_click()
----------------------------------------------------------------------------------------------

2.创建一个config目录,text1.ini文件

[login_element]click=id>com.tencent.mobileqq:id/btn_loginusername=classname>android.widget.EditTextpassword=id>com.tencent.mobileqq:id/passwordlogin_button=loginbutton[course_element]course=price

----------------------------------------------------------------------------------------------------------------------------------------

3.创建util包,创建get_by_loacl的python文件 读取配置文件

#coding=utf-8from util.read_init import ReadIni

class GetByloacl:    def __init__(self,driver):        self.driver=driver    def get_element(self,key):        read_ini = ReadIni()        local=read_ini.get_value(key)        if local!=None:            by=local.split('>')[0]            local_by=local.split('>')[1]            if by=='id':                return self.driver.find_element_by_id(local_by)            elif by=='classname':                return self.driver.find_element_by_class_name(local_by)            else:                return self.driver.find_element_by_xpath(local_by)        else:            return None

(2)封装定位信息的python read_init文件

#coding=utf-8import configparserclass ReadIni():    def __init__(self,file_path=None):        if file_path==None:            self.file_path=r'E:\Users\00\PycharmProjects\untitled\config\text1.ini'

        else:            self.file_path=file_path        self.data=self.read_ini()

    def read_ini(self):        read_ini = configparser.ConfigParser()        read_ini.read(r'E:\Users\00\PycharmProjects\untitled\config\text1.ini')        return read_ini    def get_value(self,key,section=None):        if section==None:            section='login_element'        try:            value = self.data.get(section, key)        except:            value=None

        return value

if __name__=='__main__':    read_ini=ReadIni()    print(read_ini.get_value("course","course_element"))

--------------------------------------------------------------------------------------------------------------------------------------------

创建一个doc_cmd文件     封装执行命令方法

#coding=utf-8import osclass DosCmd:   def excute_cmd_result(self,command):      result_list = []      result = os.popen(command).readlines()      for i in result:         if i =='\n':            continue         result_list.append(i.strip('\n'))      return result_list

   def excute_cmd(self,command):      os.system(command)

if __name__ == '__main__':   dos = DosCmd()   print (dos.excute_cmd_result('adb devices'))
---------------------------------------------------------------------------------------------------------------------------
#coding=utf-8from util.doc_cmd import DosCmdclass Port:   def port_is_used(self,port_num):      '''      判断端口是否被占用      '''      flag = None      self.dos = DosCmd()      command = 'netstat -ano | findstr '+str(port_num)      result = self.dos.excute_cmd_result(command)      if len(result)>0:         flag = True      else:         flag = False      return flag

   def create_port_list(self,start_port,device_list):      '''start_port 4701      生成可用端口      @parameter start_port      @parameter device_list      '''      port_list = []      if device_list != None:         while len(port_list) != len(device_list):            if self.port_is_used(start_port) != True:               port_list.append(start_port)            start_port = start_port +1         return port_list      else:         print ("生成可用端口失败")         return None

if __name__ == '__main__':   port = Port()   li = [1,2,3,4,5]   print (port.create_port_list(4722,li))
创建一个server文件  多线程启动appium服务端
#coding=utf-8from util.doc_cmd import DosCmdfrom util.port import Portimport threadingclass Server:    def get_devices(self):

        self.dos =DosCmd()        devices_list = []        result_list = self.dos.excute_cmd_result('adb devices')        if len(result_list)>=2:            for i in result_list:                if 'List' in i:                    continue                devices_info = i.split('\t')                if devices_info[1]=='device':                 devices_list.append(devices_info[0])            return devices_list        else:            return None    def create_port_list(self,start_port):        port=Port()        port_list=port.create_port_list(start_port,self.get_devices())        return  port_list    def create_commed_list(self):        command_list=[]        appium_port_list=self.create_port_list(4700)        bootstrap_port_list=self.create_port_list(4900)        device_list=self.get_devices()        for i in range(len(device_list)):            command='appium -p '+str(appium_port_list[i])+" -bp "+str(bootstrap_port_list[i])+" -U "+device_list[i]+" --no-reset --session-override"            command_list.append(command)        return command_list    def start_server(self,i):        self.start_list=self.create_commed_list()        self.dos.excute_cmd(self.start_list[i])    def main(self):        for i in range(len(self.create_commed_list())):            appium_start=threading.Thread(target=self.start_server,args=(i,))            appium_start.start()if __name__ == '__main__':    server=Server()    # print(server.create_commed_list())    # print(server.start_server())    print(server.main())
-------------------------------------------------------------------------------------------------------------------

4.创建page包,创建一个 login_page的python文件

#coding=utf-8from util.get_by_local import GetByloaclclass LoginPage:    def __init__(self,driver):        self.get_by_local = GetByloacl(driver)

    def get_username_element(self):        return self.get_by_local.get_element('username')

    def get_password_element(self):        return self.get_by_local.get_element('password')

    def get_login_elemnt(self):        return  self.get_by_local.get_element('click')

----------------------------------------------------------------------------------------------------------------------------

5.创建一个handle包,login_handle的python文件

#coding=utf-8from page.login_page import LoginPageclass Login_handle():    def __init__(self,driver):        self.login_page=LoginPage(driver)    def send_username(self,user):

        self.login_page. get_username_element().send_keys(user)    def send_password(self,password):        self.login_page.get_password_element().send_keys(password)    def send_click(self):        self.login_page.get_login_elemnt().click()

---------------------------------------------------------------------------------------------------------------------------------------

6.创建bussiness包,一个 login_bussiness的python文件

#coding=utf-8from handle.login_handle import Login_handleclass Login_bussiness:    def __init__(self,driver):        self.login_handle=Login_handle(driver)    def login_pass(self):        self.login_handle.send_username('11111')        self.login_handle.send_password('22222')        self.login_handle.send_click()

    def login_user_error(self):            self.login_handle.send_username('12111')            self.login_handle.send_password('25222')            self.login_handle.send_click()

转载于:https://www.cnblogs.com/xuzhongtao/p/9790519.html

appium分层自动化的封装相关推荐

  1. Appium UI自动化的那些梗

    @作者 彭海波 转载请注明出处 前言 由于需求的快速迭代和敏捷测试的要求,在测试过程中引入自动化成为必不可少的手段.作为一个互联网测试团队,我们自然也引入了自动化测试这个环节.在众多的测试框架中,我们 ...

  2. Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP

    前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...

  3. Appium移动自动化框架原理

    一.基本介绍 1.Appium介绍 appium是一个移动端自动化测试开源工具,支持Android和iOS平台,支持python.Java等语言,即同一套java或python脚本可以同时运行在iOS ...

  4. Appium+python自动化8-Appium Python API

    Appium+python自动化8-Appium Python API 前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts contex ...

  5. python程序如何封装成接口_python接口自动化如何封装获取常量的类

    这篇文章主要介绍了python接口自动化如何封装获取常量的类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景: 一.执行case的过程: 首先需 ...

  6. appium+python自动化57-chromedriver与chrome版本

    前言 由于app的webview自动化是依赖于chromedriver的,并且每个app的webview版本号都不太一样,这就导致了,每次都需要重新去下载对应的chromedriver版本.如何根据当 ...

  7. 让天下没有难做的研发:解读阿里CI/CD、DevOps、分层自动化技术

    在互联网时代,产品快速迭代的重要性不言而喻.不管是传统企业还是初创企业,在提升研发效能方面都有很强的需求,如果能使用一套对项目流程管理和专项自动化提效工具,来支持项目的快速迭代发布,实现24小时持续集 ...

  8. Appium+java+Android 四(appium实现自动化发朋友圈用例)

    上一篇博客我给大家分享了运用appium+java+android实现自动化发微信的测试用例,今天我再给大家分享一下自动化发朋友圈的测试用例吧,由于基本原理都一样,所以只把代码贴出来,如果有疑问的话, ...

  9. [Appium] App自动化-元素定位

    [Appium] App自动化-元素定位及工具 一.元素定位工具简介 Web自动化是通过浏览器自带的F12键进行元素定位,但是App自动化支持三大定位工具(UIAutomatorView/Appium ...

  10. android自动实例化的网站,Appium安卓自动化从入门到入土踩坑实践(五)第一个自动化脚本...

    说明:用驾考宝典来进行实战,此处用java语言进行脚本编写 1.添加配置 ①在新建的AppiumTest类中添加一个main方法,创建配置对象 ②实例化一个类 ③添加配置(也就是appium与设备连接 ...

最新文章

  1. 数据竞赛Tricks集锦
  2. linux 文件权限后面一个点的含义
  3. php的old函数,laravel单元测试之phpUnit中old()函数报错解决
  4. vue中生产模式和调试模式_为什么在生产中进行调试是如此诱人?
  5. pipenv和autoenv
  6. JQuery调用iframe子页面函数/对象的方法
  7. Java 官方性能测试工具 JMH 简单入门
  8. PYTHON 100days学习笔记001:初识python
  9. jmeter 跨线程执行变量
  10. Qt4_实现其他菜单
  11. 关于sql server2000 的1068 与 1069 问题
  12. sql join与笛卡尔积
  13. 用html制作一个中国高铁网页,行者|终于有人制作了一张靠谱的全国高铁地图!...
  14. 川轻化c语言实验答案,C语言实验目().doc
  15. 面试官:怎么不用定时任务实现关闭订单?
  16. Excel数据可视化——隐藏相同数据
  17. adc0808模数转换实验报告_模数转换实验报告
  18. python集合为什么不能用下标运算_Python的Set操作,python,集合
  19. java se  计算机专业技能-Java专项练习(选择题)(三)
  20. WPF 3D模型介绍及使用

热门文章

  1. InnoDB配置文件复习
  2. 如何优雅的使用iBatis
  3. INV 调试: 如何获取库存物料事务处理调试信息
  4. HTTP协议及POST与GET操作差异,C#中如何使用POST、GET等
  5. 提取身份证信息的自定义函数
  6. TcpTrace追踪远程服务器的soap信息
  7. zoj2676 Network Wars 0-1分数规划
  8. 无论干什么事都要对自己有信心!
  9. CSDN 编辑器使用指南
  10. 知识蒸馏 | 综述: 网络结构搜索应用