测试代码:
嵌套捕获异常确保测试流程走完
使用WebDriverWait显示等待避免因界面未显示出来造成的异常
输出日志文件记录测试流程及异常捕获
# This sample code uses the Appium python client v2
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
import logging
import time
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.mobileby import MobileBy
# For W3C actions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput
from selenium.webdriver.support.expected_conditions import visibility_of_element_located
from selenium.webdriver.support.wait import WebDriverWait
from Logger import Logger
caps = {}
caps["appium:platformName"] = "Android"
caps["appium:platformVersion"] = "9"
caps["appium:deviceName"] = "PAR-AL00"
caps["appium:appPackage"] = "com.test.Android"
caps["appium:appActivity"] = "com.test.Android.MainActivity"
caps["appium:unicodeKeyboard"] = True
caps["appium:resetKeyboard"] = True
caps["appium:noReset"] = True
caps["appium:newCommandTimeout"] = 6000
caps["appium:automationName"] = "UiAutomator2"
caps["appium:connectHardwareKeyboard"] = True
logger = Logger("appium", "appiumTest.log", CmdLevel=logging.DEBUG, FileLevel=logging.INFO)
try:
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
wait = WebDriverWait(driver, 10, 1)
# time.sleep(5)
# el1 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[3]/android.widget.LinearLayout/android.view.View")
el1_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[3]/android.widget.LinearLayout/android.view.View"
wait.until(visibility_of_element_located((MobileBy.XPATH, el1_xpath)),message="el1_xpath not found")
el1 = driver.find_element(by=AppiumBy.XPATH,value=el1_xpath)
el1.click()
logger.info(message="el1 click")
# time.sleep(1)
# el2 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout/android.widget.FrameLayout[3]")
el2_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout/android.widget.FrameLayout[3]"
wait.until(visibility_of_element_located((MobileBy.XPATH, el2_xpath)), message="el2_xpath not found")
el2 = driver.find_element(by=AppiumBy.XPATH, value=el2_xpath)
el2.click()
logger.info(message="el2 click")
# time.sleep(1)
# el3 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[3]/android.widget.LinearLayout/android.widget.FrameLayout[1]")
el3_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[3]/android.widget.LinearLayout/android.widget.FrameLayout[1]"
wait.until(visibility_of_element_located((MobileBy.XPATH, el3_xpath)), message="el3_xpath not found")
el3 = driver.find_element(by=AppiumBy.XPATH, value=el3_xpath)
el3.click()
logger.info(message="el3 click")
time.sleep(2)
actions = ActionChains(driver)
actions.w3c_actions = ActionBuilder(driver, mouse=PointerInput(interaction.POINTER_TOUCH, "touch"))
actions.w3c_actions.pointer_action.move_to_location(83, 183)
actions.w3c_actions.pointer_action.pointer_down()
actions.w3c_actions.pointer_action.pause(0.1)
actions.w3c_actions.pointer_action.release()
actions.perform()
# time.sleep(2)
# el4 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[1]/android.view.View[2]/android.widget.ListView/android.view.View[2]/android.view.View[1]")
el4_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[1]/android.view.View[2]/android.widget.ListView/android.view.View[2]/android.view.View[1]"
wait.until(visibility_of_element_located((MobileBy.XPATH, el4_xpath)), message="el4_xpath not found")
el4 = driver.find_element(by=AppiumBy.XPATH, value=el4_xpath)
el4.click()
logger.info(message="el4 click")
# time.sleep(2)
# el5 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[1]/android.view.View/android.widget.EditText")
try:
el5_xpath="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[1]/android.view.View/android.widget.EditText"
wait.until(visibility_of_element_located((MobileBy.XPATH, el5_xpath)), message="el5_xpath not found")
el5 = driver.find_element(by=AppiumBy.XPATH, value=el5_xpath)
el5.send_keys("18827637486")
logger.info(message="el5 send_keys")
except Exception as result:
logger.warn(result)
pass
# el6 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[2]/android.view.View[1]/android.widget.EditText")
try:
el6_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[2]/android.view.View[1]/android.widget.EditText"
wait.until(visibility_of_element_located((MobileBy.XPATH, el6_xpath)), message="el6_xpath not found")
el6 = driver.find_element(by=AppiumBy.XPATH, value=el6_xpath)
el6.send_keys("chenke1013")
logger.info(message="el6 send_keys")
except Exception as result:
logger.warn(result)
pass
# el7 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[5]/android.view.View/android.view.View[1]")
try:
el7_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[5]/android.view.View/android.view.View[1]"
wait.until(visibility_of_element_located((MobileBy.XPATH, el7_xpath)), message="el7_xpath not found")
el7 = driver.find_element(by=AppiumBy.XPATH, value=el7_xpath)
el7.click()
logger.info(message="el7 click")
except Exception as result:
logger.warn(result)
pass
# el8 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[4]")
try:
el8_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[4]/android.view.View[4]"
wait.until(visibility_of_element_located((MobileBy.XPATH, el8_xpath)), message="el8_xpath not found")
el8 = driver.find_element(by=AppiumBy.XPATH, value=el8_xpath)
el8.click()
logger.info(message="el8 click")
except Exception as result:
logger.warn(result)
pass
# time.sleep(3)
# el9 = driver.find_element(by=AppiumBy.XPATH,
# value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout[1]/android.widget.ImageView")
try:
el9_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout[1]/android.widget.ImageView"
wait.until(visibility_of_element_located((MobileBy.XPATH, el9_xpath)), message="el9_xpath not found")
el9 = driver.find_element(by=AppiumBy.XPATH, value=el9_xpath)
el9.click()
logger.info(message="el9 click")
except Exception as result:
logger.warn(result)
except Exception as result:
logger.warn(result)
driver.quit()
日志封装类:
# 日志综合案例的封装
import logging
class Logger():
def __init__(self, LoggerName, FileName, CmdLevel, FileLevel):
# LoggerName:实例化对象的名字 FileName:外部文件名 CmdLevel:设置控制台中日志输出的级别 FileLevel:设置文件日志输出的级别
self.logger = logging.getLogger(LoggerName)
# 设置日志的级别
self.logger.setLevel(logging.DEBUG)
# 设置日志的输出格式
fmt = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
# 借助handle将日志输出到test.log文件中
fh = logging.FileHandler(FileName)
fh.setLevel(FileLevel)
# 借助handle将日志输出到控制台
ch = logging.StreamHandler()
ch.setLevel(CmdLevel)
# 配置logger
fh.setFormatter(fmt)
ch.setFormatter(fmt)
# 给logger添加handle
self.logger.addHandler(fh)
self.logger.addHandler(ch)
def debug(self,message):
self.logger.debug(message)
def info(self,message):
self.logger.info(message)
def warn(self,message):
self.logger.warning(message)
def error(self,message):
self.logger.error(message)
def critical(self,message):
self.logger.critical(message)
控制台输出:
日志输出: