博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyapp的封装和内置函数
阅读量:4687 次
发布时间:2019-06-09

本文共 8245 字,大约阅读时间需要 27 分钟。

from lib.core.pyse import Pyse from appium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.mobileby import MobileBy class PyApp(Pyse):     def __init__(self,driver):         # 这才是真正的driver         self.d = driver         # 这里的webdriver.Remote()只为了单纯的提示文案,用于封装pyapp才使用,当pyapp写完要注释掉         self.d = webdriver.Remote()     def get_element(self, css):         '''         Judge element positioning way, and returns the element.         '''         if "=>" not in css:             raise NameError("Positioning syntax errors, lack of '=>'.")         by = css.split("=>")[0]         value = css.split("=>")[1]         if by == "id":             element = self.d.find_element_by_id(value)         elif by == "name":             element = self.d.find_element_by_name(value)         elif by == "class":             element = self.d.find_element_by_class_name(value)         elif by == "link_text":             element = self.d.find_element_by_link_text(value)         elif by == "xpath":             element = self.d.find_element_by_xpath(value)         elif by == "css":             element = self.d.find_element_by_css_selector(value)         elif by == "android":             element = self.d.find_element_by_android_uiautomator(value)         elif by == "desc":             element = self.d.find_element_by_accessibility_id(value)         elif by == "ios":             pass         else:             raise NameError(                 "Please enter the correct targeting elements,'id','name','class','link_text','xpath','css','android','desc'.")         return element     def get_elements(self, css):         '''         Judge element positioning way, and returns the element.         '''         if "=>" not in css:             raise NameError("Positioning syntax errors, lack of '=>'.")         by = css.split("=>")[0]         value = css.split("=>")[1]         if by == "id":             element = self.d.find_elements_by_id(value)         elif by == "name":             element = self.d.find_elements_by_name(value)         elif by == "class":             element = self.d.find_elements_by_class_name(value)         elif by == "link_text":             element = self.d.find_elements_by_link_text(value)         elif by == "xpath":             element = self.d.find_elements_by_xpath(value)         elif by == "css":             element = self.d.find_elements_by_css_selector(value)         elif by == "android":             element = self.d.find_elements_by_android_uiautomator(value)         elif by == "desc":             element = self.d.find_elements_by_accessibility_id(value)         elif by == "ios":             pass         else:             raise NameError(                 "Please enter the correct targeting elements,'id','name','class','link_text','xpath','css','android','desc'.")         return element     def element_wait(self, css, secs=5):         '''         Waiting for an element to display.         Usage:         driver.element_wait("css=>#el",10)         '''         if "=>" not in css:             raise NameError("Positioning syntax errors, lack of '=>'.")         by = css.split("=>")[0]         value = css.split("=>")[1]         if by == "id":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.ID, value)))         elif by == "name":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.NAME, value)))         elif by == "class":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.CLASS_NAME, value)))         elif by == "link_text":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.LINK_TEXT, value)))         elif by == "xpath":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.XPATH, value)))         elif by == "css":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.CSS_SELECTOR, value)))         elif by == "android":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.ANDROID_UIAUTOMATOR, value)))         elif by == "desc":             WebDriverWait(self.d, secs, 1).until(EC.presence_of_element_located((MobileBy.ACCESSIBILITY_ID, value)))         else:             raise NameError(                 "Please enter the correct targeting elements,'id','name','class','link_text','xpath','css','android','desc'.")
def swipe_up(self,time=300): # 向上滑         size = self.get_windows_size         x = size.get('width')         y = size.get('height')         start_x = x * 0.5         start_y = y * 0.8         end_x = x * 0.5         end_y = y * 0.2         self.d.swipe(start_x,start_y,end_x,end_y,time)     def swipe_down(self,time=300): # 向下滑         size = self.get_windows_size         x = size.get('width')         y = size.get('height')         start_x = x * 0.5         start_y = y * 0.2         end_x = x * 0.5         end_y = y * 0.8         self.d.swipe(start_x,start_y,end_x,end_y,time)     def swipe_left(self,time=300): # 向左滑         size = self.get_windows_size         x = size.get('width')         y = size.get('height')         start_x = x * 0.8         start_y = y * 0.5         end_x = x * 0.2         end_y = y * 0.5         self.d.swipe(start_x,start_y,end_x,end_y,time)     def swipe_right(self,time=300): # 向右滑         size = self.get_windows_size         x = size.get('width')         y = size.get('height')         start_x = x * 0.2         start_y = y * 0.5         end_x = x * 0.8         end_y = y * 0.5         self.d.swipe(start_x,start_y,end_x,end_y,time)     # 点击code,回车之类的code     def press_keycode(self,code):         self.d.press_keycode(code)     # 是否安装了app,返回True or False     def is_install_app(self,package):         return self.d.is_app_installed(package)     # 关闭app     def close_app(self):         self.d.close_app()     # 退出驱动     def quit(self):         self.d.quit()     # 安装app     def install_app(self,path):         self.d.install_app(path)     # 卸载app     def remove_app(self,package):         self.d.remove_app(package)     # 返回app当中全类型[原生,h5]     @property     def contexts(self):         return self.d.contexts     # 返回当前的context     @property     def context(self):         return self.d.current_context     def native_app(self):         # 获取全部contexts         app = self.contexts         if len(app) > 1:             self.d.switch_to.context(app[0])     def hybrid_app(self):         # 获取全部contexts         app = self.contexts         if len(app) == 2:             self.d.switch_to.context(app[-1])     def open_webview_or_native(self):         # 获取全部contexts         app = self.contexts         for context in app:             # self.context(当前的,调用上面的方法) 和 列表中的context进行循环对比,如果不相等,则切换到新的context             if self.context != context:                 self.d.switch_to.context(context)     # 相当于noreset=False,类似于重新安装app     def reset(self):         self.d.reset()     # 如果sendkeys无法向文本框发送内容     def set_value(self,element,value):         self.d.set_value(element,value)
# 队列 import queue q = queue.Queue() q.put('appium1') # 往队列里面放obj q.put('appium2') print(q.qsize()) # q.qsize()相当于队列长度 print(q.get()) # 从队列里面取obj print(q.get())
# yaml,通过他来写我们的配置文件,文件名以.yml为后缀,import yaml,appConfig.yml的内容如下:
# 字典是通过: devices_type: Android tester:   noReset: True   unicodeKeyboard: True   appPackage: com.android.browser   appActivity: .BrowserActivity   resetKeyboard: True devices:   android:   # 列表通过 -,层级通过缩进,多个设备,这种格式比较方便     - platformName: Android       platformVersion: 4.2.2       ip: 127.0.0.1       port: 62001       devicesName: 69cb759b     - platformName: Android       platformVersion: 4.2.2       ip: 127.0.0.1       port: 62001       devicesName: 69cb759b # subprocess模块 subprocess.getoutput(cmd),接收字符串格式的命令,执行命令并返回执行结果 subprocess.Popen(args,stdin=None, stdout=None, stderr=None, shell=False) args:要执行的shell命令,可以是字符串,也可以是命令各个参数组成的序列,当该参数的值是一个字符串时,该命令的解释过程是与平台相关的,因此通常建议将args参数作为一个序列传递 stdin, stdout, stderr: 分别表示程序标准输入、输出、错误句柄 shell: 该参数用于标识是否使用shell作为要执行的程序,如果shell值为True,则建议将args参数作为一个字符串传递而不要作为一个序列传递

转载于:https://www.cnblogs.com/laosun0204/p/9534738.html

你可能感兴趣的文章