java appium 分层结构_appium分层自动化的封装

f412a44a8da74c6fe248d4c8118f760f.png

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

#coding=utf-8

from appium import webdriver

from util.read_init import ReadIni

from util.get_by_local import GetByloacl

import time

def 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()

9c9227b8b6d0cc9ba12fb45ef936e5c1.png

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

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

[login_element]

click=id>com.tencent.mobileqq:id/btn_login

username=classname>android.widget.EditText

password=id>com.tencent.mobileqq:id/password

login_button=loginbutton

[course_element]

course=price

a4be68ab0c574c55902cdc9f58f9362a.png

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

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

#coding=utf-8

from 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

014881dd5e18d8227e05778a525ffb3d.png

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

#coding=utf-8

import configparser

class 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"))

134dc1cfc6273cdbabca4981828e5651.png

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

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

#coding=utf-8

import os

class 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'))

42a603be9fd1b32306285b9b7832f7dd.png

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

#coding=utf-8

from util.doc_cmd import DosCmd

class 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))

cb06ac0d131fcfd8ef1be67653ccbc71.png

创建一个server文件 多线程启动appium服务端

#coding=utf-8

from util.doc_cmd import DosCmd

from util.port import Port

import threading

class 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())

e2a85ef41d3afa03bed5635270372ab2.png

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

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

#coding=utf-8

from util.get_by_local import GetByloacl

class 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')

7be4407bca002d5334a26b0c5454871d.png

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

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

#coding=utf-8

from page.login_page import LoginPage

class 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()

1f62524ddb5841f50713107082aa569d.png

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

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

#coding=utf-8

from handle.login_handle import Login_handle

class 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()

a59da9ad62380a61e20cfba5ee655030.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值