import time
import allure
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.webdriver.support.wait import WebDriverWait
from util.getDriverAndLogger import logger
class PageObject:
# 初始化函数
def __init__(self, driver):
self.driver = driver
# 查找单个元素....(By.xxx,'xxx')
def findElement(self, *args):
logger.info('查找单个元素:'+str(args))
return self.driver.find_element(*args)
# 查找多个元素
def findElements(self, *args):
logger.info('查找多个元素:' + str(args))
return self.driver.find_elements(*args)
# 显示查找元素
def findElementXianShi(self,*args):
logger.info('显示等待,查找元素:' + str(args))
return WebDriverWait(self.driver, 10, 0.5).until(presence_of_element_located(*args))
# 截图操作 desc描述 手动创建screen_shots文件夹
def getScreenShot(self, desc):
# screen_shots/登录失败_20191120143330.png...strftime()格式化时间
file = 'screen_shots/' + str(desc) + '_' + str(time.strftime('%Y%m%d%H%M%S')) + '.png'
self.driver.get_screenshot_as_file(file)
logger.info('截图成功:' + str(desc)+',图片路径:'+file)
# 添加到附件
allure.attach.file(source=file, name=desc,attachment_type=allure.attachment_type.PNG)
# 吐司处理
def toastAction(self,text):
xpath = (By.XPATH, '//*[contains(@text,"{}")]'.format(text))
try:
t = WebDriverWait(self.driver, 5, 0.1).until(presence_of_element_located(xpath))
logger.info('吐司完整内容:'+str(t.text))
return t
except:
logger.info('未获取到吐司')
# 输入
def inputCh(self,el,text):
self.driver.activate_ime_engine('io.appium.android.ime/.UnicodeIME')
el.send_keys(text)
logger.info('输入内容:'+text)
# 获取屏幕的宽度和高度
def getSize(self):
s = self.driver.get_window_size()
logger.info('获取屏幕宽高:'+str(s))
return s['width'], s['height']
def swipeRight(self):
s = self.getSize()
x1 = s[0] * 0.2
x2 = s[0] * 0.8
y = s[1] * 0.2
self.driver.swipe(x1, y, x2, y, 2000)
logger.info('向右滑动')
def swipeLeft(self):
s = self.getSize()
x1 = s[0] * 0.8
x2 = s[0] * 0.2
y = s[1] * 0.6
self.driver.swipe(x1, y, x2, y, 2000)
logger.info('向左滑动')
def swipeDown(self):
s = self.getSize()
x = s[0] * 0.2
y1 = s[1] * 0.2
y2 = s[1] * 0.7
self.driver.swipe(x, y1, x, y2, 2000)
logger.info('向下滑动')
def swipeUp(self):
s = self.getSize()
x = s[0] * 0.6
y1 = s[1] * 0.7
y2 = s[1] * 0.2
self.driver.swipe(x, y1, x, y2, 2000)
logger.info('向上滑动')
# 使用坐标点击元素
def clickByXY(self,x,y):
time.sleep(3)
TouchAction(self.driver).tap(x=x, y=y).perform()
logger.info('使用坐标点击元素:'+str(x)+','+str(y))
time.sleep(2)
# 进入应用的可能操作
# 点击同意
def click_agree(self):
try:
by = (By.ID,'com.ganji.android.haoche_c:id/btn_confirm')
agree = WebDriverWait(self.driver, 5, 0.5).until(presence_of_element_located(by))
agree.click()
logger.info('点击同意按钮')
except:
pass
# 运行时权限
def allow_access(self, num=3):
for i in range(num):
by = (By.XPATH, '//*[@text="始终允许"]')
try:
access = WebDriverWait(self.driver, 5, 0.5).until(presence_of_element_located(by))
access.click()
logger.info('点击始终允许')
except:
pass
# 登录点击X
def click_cha(self):
try:
by = (By.CLASS_NAME, 'android.widget.ImageButton')
btn = WebDriverWait(self.driver, 5, 0.5).until(presence_of_element_located(by))
btn.click()
logger.info('点击关闭X')
except:
pass
# 关闭弹框广告
def closeAd(self):
try:
by = (By.ID, 'com.ganji.android.haoche_c:id/img_close')
WebDriverWait(self.driver, 5, 0.5).until(presence_of_element_located(by)).click()
logger.info('关闭弹窗广告')
except:
pass
def common(self):
# 点击同意
self.click_agree()
# 点击始终允许
self.allow_access(3)
# 点击叉号
self.click_cha()
# 关闭弹窗
self.closeAd()
创建screen_shots文件夹进行截图存储