import json
import os
import time
import uiautomator2 as u2
def read_btproperties(settings):
with open(
os.path.dirname(os.path.abspath(__file__)) + "/btsetting.json",
"r",
encoding="utf8",
) as fp:
json_data = json.load(fp)
proper = json_data[settings]
return proper
class BaseOperate(object):
def __init__(self, device_name, app_name):
self.d = u2.connect(device_name)
self.d.settings["xpath_debug"] = True
self.d.healthcheck()
self.d.screen_on()
time.sleep(1)
self.d.swipe_ext("up")
self.d.toast.show("正在启动app")
self.d.app_start(app_name, stop=True)
time.sleep(2)
self.d.app_start(app_name)
self.d.watcher.when("跳过").click()
self.d.watcher.start()
def findElement(self, elem, timeout=10):
self.ele = None
elem_pos = read_btproperties(elem)
if self.ele == None and elem_pos["xpath"] != "none":
if self.d.xpath(elem_pos["xpath"]).wait(timeout=timeout):
self.ele = self.d.xpath(elem_pos["xpath"])
if self.ele == None and elem_pos["id"] != "none":
if self.d(resourceId=elem_pos["id"]).wait(timeout=timeout):
self.ele = self.d(resourceId=elem_pos["id"])
if self.ele == None and elem_pos["text"] != "none":
if self.d(text=elem_pos["text"]).wait(timeout=timeout):
self.ele = self.d(text=elem_pos["text"])
if self.ele == None and elem_pos["textContains"] != "none":
if self.d(textContains=elem_pos["textContains"]).wait(timeout=timeout):
self.ele = self.d(textContains=elem_pos["textContains"])
if self.ele == None and elem_pos["description"] != "none":
if self.d(description=elem_pos["description"]).wait(timeout=timeout):
self.ele = self.d(description=elem_pos["description"])
if self.ele:
return True
else:
return False
def clickElement(self, elem, timeout=10):
if self.findElement(elem=elem, timeout=timeout):
self.ele.click(timeout=timeout)
def setValue(self, elem, value, timeout=10):
if self.findElement(elem=elem, timeout=timeout):
self.ele.clear_text()
self.ele.set_text(value)
def getValue(self, elem, timeout=10):
if self.findElement(elem=elem, timeout=timeout):
gettxt = self.ele.get_text(timeout=timeout)
if gettxt:
return gettxt
else:
return False
def getToast(self, toast):
toasttxt = self.d.toast.get_message(5.0, 10.0, False)
if toasttxt:
return toasttxt
else:
return False
def press(self, pressback):
self.d.press(pressback)
def getInfo(self, elem, timeout=10):
if self.findElement(elem=elem, timeout=timeout):
return self.ele.info
else:
return False
def findElementBySwipeUp(self, elem, timeout=10):
ret = 0
while True:
page_content = self.d.dump_hierarchy()[
(len(self.d.dump_hierarchy()) // 2) :
]
if self.findElement(elem=elem, timeout=timeout):
ret = 1
break
self.d.swipe_ext("up")
new_page_content = self.d.dump_hierarchy()[
(len(self.d.dump_hierarchy()) // 2) :
]
if new_page_content == page_content:
break
if ret == 1:
return True
else:
return False
def clickElementBySwipeUp(self, elem, timeout=10):
if self.findElementBySwipeUp(elem=elem, timeout=timeout):
self.ele.click(timeout=timeout)
def swipeExt(self, way, scale=0.6):
self.d.swipe_ext(way, scale=scale)
def longClick(self, elem, timeout=10):
if self.findElement(elem=elem, timeout=timeout):
self.ele.long_click()
def longClickBySwipe(self, elem, timeout=10):
if self.findElementBySwipeUp(elem=elem, timeout=timeout):
self.ele.long_click()
def openOtherApp(self, app_name):
self.d.app_start(app_name)