appium分层自动化的封装
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分层自动化的封装相关推荐
- Appium UI自动化的那些梗
@作者 彭海波 转载请注明出处 前言 由于需求的快速迭代和敏捷测试的要求,在测试过程中引入自动化成为必不可少的手段.作为一个互联网测试团队,我们自然也引入了自动化测试这个环节.在众多的测试框架中,我们 ...
- Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP
前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...
- Appium移动自动化框架原理
一.基本介绍 1.Appium介绍 appium是一个移动端自动化测试开源工具,支持Android和iOS平台,支持python.Java等语言,即同一套java或python脚本可以同时运行在iOS ...
- Appium+python自动化8-Appium Python API
Appium+python自动化8-Appium Python API 前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts contex ...
- python程序如何封装成接口_python接口自动化如何封装获取常量的类
这篇文章主要介绍了python接口自动化如何封装获取常量的类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景: 一.执行case的过程: 首先需 ...
- appium+python自动化57-chromedriver与chrome版本
前言 由于app的webview自动化是依赖于chromedriver的,并且每个app的webview版本号都不太一样,这就导致了,每次都需要重新去下载对应的chromedriver版本.如何根据当 ...
- 让天下没有难做的研发:解读阿里CI/CD、DevOps、分层自动化技术
在互联网时代,产品快速迭代的重要性不言而喻.不管是传统企业还是初创企业,在提升研发效能方面都有很强的需求,如果能使用一套对项目流程管理和专项自动化提效工具,来支持项目的快速迭代发布,实现24小时持续集 ...
- Appium+java+Android 四(appium实现自动化发朋友圈用例)
上一篇博客我给大家分享了运用appium+java+android实现自动化发微信的测试用例,今天我再给大家分享一下自动化发朋友圈的测试用例吧,由于基本原理都一样,所以只把代码贴出来,如果有疑问的话, ...
- [Appium] App自动化-元素定位
[Appium] App自动化-元素定位及工具 一.元素定位工具简介 Web自动化是通过浏览器自带的F12键进行元素定位,但是App自动化支持三大定位工具(UIAutomatorView/Appium ...
- android自动实例化的网站,Appium安卓自动化从入门到入土踩坑实践(五)第一个自动化脚本...
说明:用驾考宝典来进行实战,此处用java语言进行脚本编写 1.添加配置 ①在新建的AppiumTest类中添加一个main方法,创建配置对象 ②实例化一个类 ③添加配置(也就是appium与设备连接 ...
最新文章
- 数据竞赛Tricks集锦
- linux 文件权限后面一个点的含义
- php的old函数,laravel单元测试之phpUnit中old()函数报错解决
- vue中生产模式和调试模式_为什么在生产中进行调试是如此诱人?
- pipenv和autoenv
- JQuery调用iframe子页面函数/对象的方法
- Java 官方性能测试工具 JMH 简单入门
- PYTHON 100days学习笔记001:初识python
- jmeter 跨线程执行变量
- Qt4_实现其他菜单
- 关于sql server2000 的1068 与 1069 问题
- sql join与笛卡尔积
- 用html制作一个中国高铁网页,行者|终于有人制作了一张靠谱的全国高铁地图!...
- 川轻化c语言实验答案,C语言实验目().doc
- 面试官:怎么不用定时任务实现关闭订单?
- Excel数据可视化——隐藏相同数据
- adc0808模数转换实验报告_模数转换实验报告
- python集合为什么不能用下标运算_Python的Set操作,python,集合
- java se 计算机专业技能-Java专项练习(选择题)(三)
- WPF 3D模型介绍及使用