Appium+Python实现APP启动页跳转到首页

发表于:2019-4-23 08:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃子    来源:51Testing软件测试网原创

  本文以 MSN news 为例,实现启动APP后跳转到首页的功能,包含使用list进行元素定位、try except else 进行是否首次启动APP判断,logging 进行日志记录等功能
  一、场景:
  1.启动APP后连续跳过welcom、interest 、what’s new页面到首页
  2.判断是否是首次启动,如果首次启动通过出现welcom页面,如果不是首次启动则直接进入interest页面
  3.使用logging模块记录日志
  Gif图片文件:
  二、实践
  2.1、启动APP后连续跳过welcom、interest 、what’s new页面到首页
  welcom页面
  1.首先启动Appium进行session回话
  2.APP启动到welcom页面,点击not now按钮,跳转到下一个页面
  分析:这里我使用list元素进行定位,通过观察可以知道class name 和sign in name名称相同,如果直接使用classname那么就会定会到当前页面首个class name元素,导致定位失败。
  list定位获取一组class名称,通过数组下标进行区分
   a=driver.find_element_by_id()
  a[1].click()
  3.代码:
   skipwel=driver.find_elements_by_class_name('android.widget.Button')
  skipwel[1].click()
  2.2、判断是否是首次启动,如果首次启动通过出现welcom页面,如果不是首次启动则直接进入interest页面
  首次启动app时,会弹出welcome页面,但是第二次启动时该页面就会消失,出现interest页面那么对于这种判断我们该如何处理呢
  这里我们使用try except 语句进行判断
  try except 语法:
  工作原理:
  如果try语句发生异常,则执行except 匹配名称后语句
  如果try语句未发生异常,执行else后面语句
  如果try语句发生异常,except语句后内容没有匹配成功,异常将被递交到上层的try
  处理思路:
  定位interest页面,如果定位失败,证明出现的是welcome,执行welcome语句;否则执行interest页面语句
  代码:
   def welcome():
  logging.info('skip welcome')
  skipwel=driver.find_elements_by_class_name('android.widget.Button')
  skipwel[1].click()
  try:
  driver.find_elements_by_class_name('android.widget.Button')
  except NoSuchElementException:
  welcome()
  else:
  skipinterest=driver.find_elements_by_class_name('android.widget.Button')
  skipinterest[0].click()
  interets 页面
  原理同welcom 页面
   skipinterest=driver.find_elements_by_class_name('android.widget.Button')
  skipinterest[0].click()
  what‘s new page
  原理同welcom 页面
   skipwhatnew=driver.find_elements_by_class_name('android.widget.Button')
  skipwhatnew[1].click()
  2.3、使用logging 模块记录日志
  日志是用来帮我们定位问题,通过日志可以更准准确的确定问题所在,我们可以设定日志级别、日志的输出格式等
  场景:
  在启动APP时,输出start app 日志
  导航页跳转到首页过程,输出执行的页面为interest 页面还是welcome 页面
  2.3.1、单个py文件日志
  在单个py文件里日志输出形式如下:
  1.日志流程
  首先,导入日志模块
  然后,basicconfig 方法创建记录器,为记录做基本配置。
  日志级别:level
  日志输出路径:Filename
  日志输出格式:Format
  最后,在需要添加日志的地方输出日志即可,logging.info(’start app‘)
  2. 代码实现
   import logging
  logging.basicConfig(level=logging.INFO,filename='456.log',
  format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
  #判断是否首次启动App,跳过导航页到首页
  def welcome():
  logging.info('skip welcome')
  skipwel=driver.find_elements_by_class_name('android.widget.Button')
  skipwel[1].click()
  try:
  driver.find_elements_by_class_name('android.widget.Button')
  except NoSuchElementException:
  logging.info('run welcome')
  welcome()
  else:
  logging.info('run interest')
  skipinterest=driver.find_elements_by_class_name('android.widget.Button')
  skipinterest[0].click()
  3.运行
  在代码中456.log中查看日志输出信息
  2.3.2 日志模块
  上面讲述的是单个功能日志的流程,整个APP测试下来有很多功能都需要用到日志,如果每个功能都重复编写,会造成代码冗余
  所以,下面我们把日志的配置参数抽离出来,需要时直接调用即可
  1.首先建立log.conf文件,存储配置参数等信息
  log.conf文件代码:
   [loggers]
  keys=root,infoLogger
  [logger_root]
  level=DEBUG
  handlers=consoleHander,fileHandler
  [logger_infoLogger]
  handlers=consoleHander,fileHandler
  qualname=infoLogger
  propagat=0
  [handlers]
  keys=consoleHander,fileHandler
  [handler_consoleHander]
  class=StreamHandler
  level=INFO
  formatter=form02
  args=(sys.stdout,)
  [handler_fileHandler]
  class=FileHandler
  level=INFO
  formatter=form01
  args=('456.log','a')
  [formatters]
  keys=form01,form02
  2.在需要引用log的py文件中引用log.conf文件
  将上文中如下代码删除
   logging.basicConfig(level=logging.INFO,filename='456.log',
  format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
  更换为:
   CON_LOG='log.conf'
  logging.config.fileConfig(CON_LOG)
  logging=logging.getLogger()
  三、报错提示
  总结运行过程中报错提示及解决方法
  1.Eclipse运行 启动app 代码,提示launching new configuration
  Eclipse
  解决方法:
  Project -> Properties -> Run/Debug Settings:
  1. select "Launching New_configuration5"
  2. Delete
  2.ImportError: cannot import name 'webdriver'
  解决方法:
  from selenium import webdriver
  3.TypeError: 'WebElement' object does not support indexing
  解决:把find_element 改为find_elements?
  4.IndexError: list index out of range
  解决:
  有可能是数组越界,里面数值从0开始标记
  再有可能list是一个空的,没有一个元素
  进行list[0]就会出现该错误
  5.module 'logging' has no attribute 'basicConfig'
  解决:
  自己就命名了一个logging.py的文件,在代码中import的是自己新建的这个,找不到basicConfig,文件名改成logging_test.py后,正常运行。
  6.int' object is not callable
  解决:发现代码中写的是logging.DEBUG,应该为logging.debug()

    ......
查看更多精彩内容,请点击下载:
版权声明:本文出自《51测试天地》第五十三期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号