App混合应用Appium自动化测试框架技术难点

前言

难点?Appium工具的坑太多了,一上百度搜索就是一箩筐各种解决方案,且不同人不同环境,实则静下心来分析,无非就是环境问题和使用者对框架的思考问题!为什么这么说呢?例如:app混合h5的自动化,操作时需要切换context上下文,才能继续操作,且操作完h5还需要切换回原生环境;分析环境问题:如果不是chromedriver驱动版本和模拟器或者真机不匹配,就是操作元素的方法需要改进<即未等待元素出现操作无效>;同时我也相信搜索此类问题的同学,想必对操作页面元素的方法和各种显示等待也了然于胸,却不知为何偏偏总有些不尽人意的事情出现。So,一堆搜索的答案也不知道哪个是对的,唯有不断实战才能总结出自己的问题在哪里!

再来说我的问题,问题有二:

1、app混合应用H5操作返回<按钮无效?

2、app原生跳转操作返回<按钮无效?excuse me!!!

在工作环境就这两个问题调试就是好几个小时,仍旧无解?于是乎开始百度搜索,第一个问题有说是开发需要将app支持debug啥模式,才能正确定位h5的元素?我将信将疑,先将博客发给Android同学看看,然后自己在家再试试,结果是实现了混合应用app切换context操作。至于第二个问题,我相信不是问题,而是我对方法封装得不够优秀,从而可能导致元素无法正确操作!

那么当元素无法正确工作的时候,我们该想什么办法来弥补呢?

第一想到了模拟键盘返回操作,appium是在继承了selenium框架封装了一些特殊的方法,所以想到了back、按键等操作。

下面开始分析下面的代码:
 

  1. import time

  2.   from appium import webdriver

  3.   from appium.webdriver.common.mobileby import MobileBy

  4.   desired_caps = { "platformName": "Android",

  5.   "deviceName": "127.0.0.1:21503 device", # 设备名称

  6.   "platformVersion": "5.1.1", # android系统版本号

  7.   "appPackage": "com.chutzpah.yasibro.test", # app包名

  8.   "appActivity": "com.chutzpah.yasibro.main.view.MainActivity", # 启动launch Activity

  9.   "noReset": True, # 重置缓存,第一次安装启动app

  10.   'automationName': 'Uiautomator2', # toast 必须用Uiautomator2 "chromedriverExecutableDir":r"C:\Users\Administrator\node_modules\appium\node_modules\appium-chromedriver\chromedriver\24" }

  11.   driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

  12.   time.sleep(15) # 启动时间等待,放长一点 print("还没点h5广告吗?")

  13.   try:

  14.    contexts=driver.contexts print("获取contexts上下文:%s" %contexts)

  15.    print("我是原生点击<返回1")

  16.    back_button1=(MobileBy.ANDROID_UIAUTOMATOR,'new UiSelector().className("android.widget.ImageView").instance(1)')

  17.    driver.find_element(*back_button1).click()

  18.    time.sleep(5) # 这个是原生定位元素的问题,没有操作正确

  19.    print("我是原生点击<返回2")

  20.    back_button2=(MobileBy.ANDROID_UIAUTOMATOR,'new UiSelector().className("android.widget.ImageView").instance(1)')

  21.    driver.find_element(*back_button2).click()

  22.    time.sleep(5) # driver.switch_to.context(contexts[-1])

  23.    # print("切换后context是:%s" % driver.current_context)

  24.    # print("我是webview点击<返回") #

  25.    back_h5=(MobileBy.XPATH,"//*//div[@class='navigation_bar_left']") #

  26.    driver.find_element(*back_h5).click() # driver.switch_to.context("NATIVE_APP") #

  27.    time.sleep(5)

  28.    # print("我是keyevent返回") #

  29.    driver.keyevent(4) # back事件 code 4 #

  30.    time.sleep(5)

  31.    print("我是press_keycode返回")

  32.    driver.press_keycode(4)

  33.    time.sleep(5) #

  34.    print("我是back返回") #

  35.    driver.back() #

  36.    time.sleep(5) # driver.switch_to.context("NATIVE_APP")

  37.    exam_tab=(MobileBy.XPATH,"//android.widget.TextView[(@text='考试')]")

  38.    driver.find_element(*exam_tab).click() time.sleep(5)

  39.   except:

  40.    raise

  41.   finally:

  42.    driver.close_app()

  43.    driver.quit()

第一段返回操作的是原生<返回按钮,毋须切换上下文context,只要元素定位准确及操作正确,即可正常返回上一页面。

第二段亦是如此!

第三段是切换上下,先由contexts得到上线问列表<必须是点击了webview的控件之后获取,否则仍是native_app>,切记操作完h5之后,需要切换回原生环境:switch_to.context("NATIVE_APP");

也可以通过点击webview控件之后,由current_context当前上下文环境判断是否H5环境!

第四段是模拟设备键盘操作keyevent事件,百度有人说会容易报错。

第五段同第四段,建议使用press_keycode()方法模拟设备键盘操作。

第六段就是浏览器的返回操作,在app中不建议使用且不见的有效。

至此,整个功能到此为止,按需索取!

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值