简介

  在现在的移动端App中,由于开发效率、需求频繁变更的需求情况下,经常有相关的运营需求,经常要进行更新,如果全部采用原生开发,需要的成本比较高,后来就出现了内嵌的H5页面。那么这些H5页面元素该如何进行定位操作呢?

  针对这种H5场景直接使用前面所讲的方法来进行定位是不行,因为前面的都是基于Andriod原生控件进行元素定位,而Web网页是单独的B/S架构,两者的运行环境不同因此需要进行上下文(context)切换,然后对H5页面元素进行定位操作。

  上下文:在程序中context我们可以理解为当前对象在程序中所处的一个环境。 比如前面提到的App一个界面是属于Activity类型,也就是Android界面环境,但是当访问内嵌的网页是属于另外一个环境(网页环境),两者处于不同的一个环境。

H5元素定位准备工作

Webview 调试模式是否开启检查

  • 在自动化脚本中,进入到对应的H5页面,打印输出当前context,如果一直显示为Natvie App,则webview未开启
  • 打开app对应的h5页面,在 chrome://inspect/#devices 地址中,检查是否显示对应的webview,如没有,则当前未开启调试模式
  • 开启方式:
    在WebView类中调用静态方法setWebContentsDebuggingEnabled,这种需要App开发人员操作。

    if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {  WebView.setWebContentsDebuggingEnabled(true);
    

拿到H5页面地址和chrom版本信息

本次测试应用为学科网APP

  • 手机与电脑连接,开启USB调试模式,通过adb devices可查看到此设备

  • 在手机端(模拟器)打开应用,进入H5页面

  • 在电脑端Chrome浏览器地址栏输入chrome://inspect/#devices,进入调试模式

  • 查看显示出来的H5页面地址
    地址:https://m.zxxk.com/activity/appnewusergift/
    chrom浏览器版本:75.0.3770.143

下载对应Chromedriver

  • 打开Chromedriver下载地址进行下载对应版本
  • http://chromedriver.storage.googleapis.com/index.html?path=75.0.3770.140/
  • 将下载的驱动放到一个路径,例如:C:\Users\Administrator\Desktop\chromedriver_win32

contexts上下文操作

  • 获取所有上下文
    driver.contexts

  • 获取当前上下文
    driver.context

  • 切换上下文
    方法一:driver.switch_to.context('WEBVIEW_com.xkw.client')
    方法二:contexts = driver.contexts
    driver.switch_to.context(contexts[-1])

  • 切回原生应用
    driver.switch_to.context('NATIVE_APP')

实战案例

  • 实战场景

    • 启动学科网APP应用,在发现页面点击现金券下载券领取活动
    • 在活动落地页,点击一键领取大礼包按钮
    • 在点击登录注册页面的左上角的关闭按钮
  • 实战代码

    # _*_ coding:utf-8 _*_
    import time
    from appium import webdriver
    from appium.webdriver.common.appiumby import AppiumBydesired_caps = {"platformName": "Android","platformVersion": "7.1.2","udid": "127.0.0.1:62001","appPackage": "com.xkw.client","appActivity": "com.zxxk.page.main.LauncherActivity","noReset": True,'automationName': 'uiautomator2',"chromeOptions": {'w3c': False},"chromedriverExecutable": r"C:\Users\Administrator\Desktop\chromedriver_win32\chromedriver.exe"
    }driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
    driver.implicitly_wait(30)# 点击活动入口
    driver.find_element(AppiumBy.ID, "com.xkw.client:id/iv_horizontal_pic").click()
    time.sleep(5)
    # 获取contexts
    context = driver.contexts
    # 切换到webview
    driver.switch_to.context(context[-1])driver.find_element(AppiumBy.ID, "getgifts").click()
    time.sleep(1)
    # 切换到Native
    driver.switch_to.context("NATIVE_APP")
    driver.find_element(AppiumBy.ID, "com.xkw.client:id/common_toolbar_back_img").click()
    

以上为内容纯属个人理解,如有不足,欢迎各位大神指正 !

Appium 自动化测试 H5页面元素定位相关推荐

  1. APP UI 自动化测试 H5页面元素定位

    使用 uc-devtools 代替 uiautomatorviewer 查找定位H5元素 由于uiautomatorviewer 只能定位APP原生页面: 所以要定位app H5 页面内的元素 使用 ...

  2. Appium常用操作及H5页面元素定位

    目录 1.去登录考研帮系统 2.高级手势操作 1.tap() 2.移动 move_to 3.滑屏操作 3.多点触控 multiAction 4.原生嵌套H5 1.去登录考研帮系统 import tim ...

  3. MuMu模拟器+Edge浏览器:Android原生APP嵌入的H5页面元素定位

    前提条件: 1.已安装MuMu模拟器 2.已配置adb环境 adb链接MuMu模拟器 C:\Users\shenyf>adb connect 127.0.0.1:7555 connected t ...

  4. UI自动化测试之八大元素定位方法(最新版)

    Selenium-UI自动化测试之八大元素定位方法(最新版) 前言 UI界面本质上就是HTML直接体现,脚本通过HTML标签信息来找到具体的元素. 元素定位:通过代码调用方法查找元素 一.ID定位 概 ...

  5. h5页面元素聚焦手机无法弹出键盘

    移动端h5做手机app的直播视频碰到的问题 h5页面元素聚焦手机无法弹出键盘 问题是这样产生的: 公司最近要搞一个直播的h5活动页内嵌到app上,当然我就来负责这个了. 但是这个项目我是半道接手的,原 ...

  6. Android app UI自动化测试 常用的元素定位方法

    本文简要介绍了移动端Android APP进行UI自动化测试时,常用到的元素定位方法 目录 前言 一.通过resource-id定位 二.通过class name定位 三.通过accessibilit ...

  7. css定位页面元素,页面元素定位-CSS元素基本定位

    基本定位 """属性定位 一 """ # #通过id # driver.find_element_by_css_selector(" ...

  8. java 获取页面元素的位置_Selenium Java 页面元素定位2

    一.操作目的 1.1 自动化测试常用操作 1.定位网页上的元素,并存储到一个变量中: 2.对变量进行操作,比如点击或输入文字: 3.设定页面元素的操作值: 二.定位方法汇总 2.1 findEleme ...

  9. web页面-元素定位

    web自动化测试核心内容: 元素定位 网页操作 等待 pytest + selenium 项目实战 1.为什么要元素定位  元素定位是为了操作浏览器,如输入内容,点击按钮等,就是手工做的,自动化都可以 ...

最新文章

  1. 用git提交代码时,由于进程加锁,突然崩溃,未来得及解锁,导致其他进程访问不了...
  2. 一、CSS实现横列布局的方法总结
  3. 暴雪帝国倾倒前的颓萎:积重难返辉煌渐淡
  4. 在Linux上自动调整屏幕亮度保护眼睛
  5. Spring @Conditional
  6. 数组-slice、indexOf
  7. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
  8. ubuntu下MySQL的安装使用与卸载-程序编译
  9. 【算法笔记】马拉车算法:最长回文子串
  10. ios 图片逆时针旋转_iOS 图片旋转方法实例代码
  11. java 将map转List对象
  12. 屏幕录像专家出现未注册字样
  13. 如何使用计算机管理员账户,如何使用管理员身份运行程序【图解】
  14. 安全测试(初测)报告
  15. 马化腾:灰度法则的七个维度
  16. 阿里 达摩院 cv 算法 面经
  17. 【抖音小程序】抖音小程序避免onClose重复回调 解决广告重复回调
  18. 一种用于NDN的安全的链路状态路由协议
  19. 五款最佳VMware vSphere免费管理工具
  20. 简易凯撒密码实现,很容易

热门文章

  1. DM达梦数据库dminit使用手册
  2. ThingsBoard GateWay网关安装
  3. 信息化、数字化与数智化傻傻分不清
  4. 计算机打字打出来的是数字,打字为什么出现数字
  5. logstash 数据重复问题
  6. 通过Windows7升级正版Windows10
  7. 乒乓球单循环赛_【乒乓球比赛单循环表资讯】乒乓球比赛单循环表足球知识与常识 - 足球百科 - 599比分...
  8. 计算机管理找不到防火墙,win10系统防火墙服务找不到的具体方案
  9. 计算机应用基础(本)第4章答案,计算机应用基础第4章习题答案(江西省三校生).doc...
  10. springboot中怎么进行统一日志处理?