APP自动化02-app项目
baseaction.py
build_data.py
init_driver.py
统一入口,handle.py
handle_login.py
login_page.py
test_login.py
baseaction代码:
from appium.webdriver.common.touch_action import TouchAction from selenium.webdriver.support.wait import WebDriverWait class BaseAction: def __init__(self, driver): self.driver = driver def get_element(self, feature): wait = WebDriverWait(self.driver, 5, 1) try: obj = wait.until(lambda x: x.find_element(*feature)) except Exception: # 此时有异常,此时返回None return None else: # 没有异常 return obj # 自定义工具方法:只负责获取屏幕大小 def get_size(self): return self.driver.get_window_size() # 自定义工具方法:从右向左滑动 def swipe_left(self): # 不能将坐标写死,需要由当前的屏幕分辨率来自由的决定 # 想办法来获取当前屏幕的尺寸 obj_size = self.get_size() w = obj_size["width"] h = obj_size["height"] self.driver.swipe(w * 0.9, h * 0.5, w * 0.1, h * 0.5) def swipe_up(self, t=1500): # 不能将坐标写死,需要由当前的屏幕分辨率来自由的决定 # 想办法来获取当前屏幕的尺寸 obj_size = self.get_size() w = obj_size["width"] h = obj_size["height"] self.driver.swipe(w * 0.5, h * 0.9, w * 0.5, h * 0.1, t) def execute_tap(self, feature): # 此方法在调用时 不确定用户传入的是元素对象还是元组 # 所以我们可以通过代码来进行判断 action = TouchAction(self.driver) if isinstance(feature, tuple): # 说明用户传入的是元组信息 feature = self.get_element(feature) action.tap(feature).perform() def execute_input(self, ele, val): # 判断用户输入的是否为元组 if isinstance(ele, tuple): # 如果是一个元组,则直接获取元素 ele = self.get_element(ele) ele.send_keys(val) def get_ele_recursion(self, feature): # 1 查找目标元素 # 如果说找到了,则直接返回当前元素 # 如果说没有找到,则滑动屏幕,再次查找 obj = self.get_element(feature) if obj: # 代码如果走到这里表进找到了 return obj else: # 代码如果走到这里就说明没有找到 # 滑屏,接着找 self.swipe_up(t=3000) return self.get_ele_recursion(feature) # 7 自定义工具方法 def get_ele_by_parent(self, par, sub): # 当前方法之所以存在就是为了去查找后代,因此不考虑,祖先不存在的情况 parent = self.driver.find_element(*par) wait = WebDriverWait(parent, 5, 1) try: obj = wait.until(lambda x: x.find_element(*sub)) except Exception: return None else: return obj