Appium基础 — webview操作(重点)

这篇具有很好参考价值的文章主要介绍了Appium基础 — webview操作(重点)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们之前说过的所有操作,都是对原生页面的操作。

在手机APP中,除了原生页面,还是有webview页面(也就是H5页面),下面我们就说说对webview页面的操作。

1、先了解什么是Hybrid(混合)?

移动混合应用程序的App,即在移动应用程序中嵌入了Webview,通过Webview访问网页。

移动应用和Webview分别属于两个不同的上下文,移动应用默认的Context”NATIVE_APP”Webview默认的Context”WEBVIEW_被测进程名称”

在测试Webview中的网页内容时,需要切换到WebviewContext下。(就相当于在app中开启了一个新的页面。)

2、识别webview

  • UI Automator Viewer定位工具查看页面,发现页面上有些区域无法定位到,如下图左边红色区域,只能定位到这个大框框,红色框里面的元素是无法识别的。

Appium基础 — webview操作(重点)

  • 这时候可以查看元素属性,如图它的class属性,上面写着android.webkit.WebView,那毫无疑问这种页面就是webview了。

3、context上下文

(1)context是中文翻译是上下文,环境。

当然学过selenium的同学,也可以理解为句柄(handle),其实是一回事,反正知道是两个不同的环境就行了。

(2)先获取页面是contexts环境,如下图红色区域,获取的是一个list列表,这个列表包含了该界面中所有的页面,包括原生页面(native)和webview页面。

NATIVE_APP:这个就是native,也就是原生的页面。

WEBVIEW_com.xxxx :这个就是webview页面。

(3)当看到打印出来如有['NATIVE_APP', 'WEBVIEW_com.baidu.searchbox']的信息,就说明获取到webview的context了(当然也有的app有坑,可能明明有webview,却通过contexts获取不到,这种需要特殊处理了)

Appium基础 — webview操作(重点)

4、webview和原生页面之前的切换

要想操作webview上的元素,第一步需要切换环境(跟selenium的切换iframe,切换handle思路是一样)

  • 原生页面切换webview方法:switch_to.context(参数是具体webview的context)
  • webview切换原生页面方法:switch_to.context(原生页面的context)
# 调用方式
# 由于已经获取到contexts了,是一个list对象,取这个list的第二个参数就行,也就是contexts[1]
# contexts = ['NATIVE_APP', 'WEBVIEW_com.baidu.searchbox']
# 1.切换到webview
driver.switch_to.context(contexts[1])

# 2.切换到原生
driver.switch_to.context(contexts[0])

5、综合练习

提示:下面练习中,我把android虚拟机的系统换成5.1.1版本了,7.1.2版本的android虚拟机获取不到webview页面的context,未找到原因。文章来源地址https://www.toymoban.com/news/detail-409128.html

"""
1.学习目标
    必须掌握APP中webview页面的操作方法
2.操作步骤
    2.1 webview页面概念----H5页面

    2.2 识别webview页面
        借助元素定位工具,如果无法获取页面局部元素,只能定位整个页面,
        该页面他的class属性值=android.webkit.webview,则该页面是webview页面

    2.3 操作webview页面---相当于selenium中iframe操作步骤
        1.获取到webview页面的context
            获取所有contexts包括原生页面和webview
                driver.contexts
            获取当前context
                driver.current_context
        2.进入webview
            driver.swith_to.context(具体webview页面的context值)
        3.操作webview页面中的元素
            操作方法和selenium中操作web页面是一致的
            借助chrome://inspect(需要梯子)
            操作过程中,注意chromedriver和手机本身浏览器内核版本匹配
        4.退出webview  等同于进入native
            回到原生页面
            driver.switch_to("NATIVE-APP")

3.需求
    在百度appl操作webview页面:微博登录页面
"""

# 1.导入appium和TouchAction
import time
from appium import webdriver

# 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
    "platformName": "Android",  # 系统名称
    "platformVersion": "5.1.1",  # 系统版本
    "deviceName": "127.0.0.1:21503",  # 设备名称
    "appPackage": "com.baidu.searchbox",  # APP包名
    "appActivity": ".MainActivity"  # APP启动名
}

# 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

# 4.操作APP
# 4.1 点击未登录
driver.wait_activity(".MainActivity", 10)
driver.find_element_by_android_uiautomator('new UiSelector().text("未登录")').click()

# 4.2 点击微博登录按钮
driver.wait_activity(".MainActivity", 10)
driver.find_element_by_accessibility_id("微博登录").click()

# 4.3 获取页面所有的context
# 指native(原生)页面和webview页面
driver.wait_activity("com.sina.weibo.sdk.web.WeiboSdkWebActivity", 15)
contexts = driver.contexts
# 输出结果:['NATIVE_APP', 'WEBVIEW_com.baidu.searchbox']
# 'NATIVE_APP' : 代表原生页面
# 'WEBVIEW_com.baidu.searchbox' : 代表webview页面
print(contexts)

# 4.3 进入webview中
driver.switch_to.context(contexts[1])
# 查看当前页面的context
print(driver.current_context)
time.sleep(5)

# 4.4 操作webview页面元素
# 定位微博登录页面的邮箱/手机输入框。并输入内容
# 操作方法和selenium中操作web页面是一致的
username = driver.find_element_by_id("loginName")
# 如果需要输入中文,需要在Desired capabilities对象中添加两个配置项
# "unicodeKeyboard": True,
# "resetKeyboard": True
username.send_keys("123456")

# 这里有几点需要注意:
# 1.在webview页面定位元素需要借助chrome://inspect工具
#   在chrome://inspect中找打当前打开的webview页面(具体操作可以看之前的文章)
#   注意:chrome://inspect的使用需要梯子。
# 2.注意chromedriver和手机本身浏览器内核版本匹配
#   否则定位不到元素,还会报错,如下:
#   WebDriverException : Original error: No Chromedriver found that can automate Chrome '39.0.0'.
#   意思是WebDriver的操作:未找到可自动执行Chrome '39.0.0' 版本的Chromedriver驱动
#   说明一下:在webview中的操作和selenium中的操作是一致的
#       所需webview中操作的执行也是需要Google浏览器的驱动。
#       在Android手机中,浏览器的内核都是Google的,
#       Google浏览器的内核版本是多少,报错中已经给出提示。
#       如上报错信息中提示的是'39.0.0' 版本,
#       我们就需要找一个'39.0.0' 版本对应的的Chromedriver驱动
#       (下载一个2.13版本的Chromedriver驱动就可以对应'39.0.0' 版本的Google浏览器)
#       然后把该Chromedriver驱动放入Appium的安装目录中,具体位置如下:
#       C:\Users\L\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
#       把之前的删除掉,或者备份一下。


# 4.5 退出webview   进入native(原生页面)
driver.switch_to.context(contexts[0])
# 查看当前页面的context
print(driver.current_context)
time.sleep(3)
# 点击关闭微博登陆页面
driver.find_element_by_android_uiautomator('new UiSelector().text("关闭")').click()

# 5.关闭APP
time.sleep(3)
driver.quit()

到了这里,关于Appium基础 — webview操作(重点)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TeamView: 为了进一步增强安全性,在发起连接之前,我们希望您先验证您的账户

    TeamViewPC端远程连接另外一台电脑 弹出窗口:为了进一步增强安全性,在发起连接之前,我们希望您先验证您的账户 电脑浏览器自动跳转到手机号验证页面,输入正确的手机号后,点击验证却一直提示 手机号无效、手机号未知等异常。 复制验证链接到手机 https://login.teamviewer.

    2024年02月14日
    浏览(51)
  • 【C语言】文件操作重点内容梳理

    本文目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 文件的打开和关闭 2.1 文件指针 2.2 文件的打开和关闭 3. 文件的顺序读写 3.1 顺序读写函数介绍 4. 文件的随机读写 4.1 fseek 4.2 ftell 4.3 rewind 5. 文本文件和二进制文件 6. 文件读取结束的判定 6.1 被错误使用的 feof  7

    2024年02月14日
    浏览(32)
  • python-appium-触摸事件(模拟触屏操作)

            TouchAction 类将一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接收到该链条后,解析各个动作,逐个执行。 一、方法         短按: press()         长按: long_press()         点击: tap()         移动到: move_to(x,y),x,y相对于上

    2023年04月09日
    浏览(20)
  • Appium自动化(7):手机H5网页元素识别及操作

    H5网页是指第5代HTML,也指用H5语言制作的一切数字产品。HTML5的设计目的是为了在移动设备上支持多媒体。目前很多网站都做了自适应,通过不同端打开呈现不同的网页效果。appium支持在手机端对web网页进行UI自动化操作。 appium对手机端H5网页进行自动化操作步骤如下: 模拟

    2024年01月19日
    浏览(33)
  • vue基础--重点

    扩充 : v-model在封装时,内部就监听了 :value  (v-bind:value) 属性的变化, 所以用v-model,:value 就不用了 !1、 工作中 ,一般 v-model 绑定的 和   :value绑定的    相同 2、这个例子中  v-model 绑定的是属性,:value绑定的是值      

    2024年02月09日
    浏览(17)
  • uniapp app的webview与h5交互操作

    app里的webview与h5交互操作,需要在h5页面加点代码,然后才能执行app里的方法 官方地址 在nvue页面里才能实现与h5的交互,设置webview的高度

    2024年02月11日
    浏览(37)
  • Mysql:重点且常用的操作和理论知识整理 ^_^

    目录 1 基础的命令操作 2 DDL 数据库定义语言 2.1 数据库操作 2.2 数据表操作 2.2.1 创建数据表 2.2.2 修改和删除数据表 2.2.3 添加外键 3 DML 数据库操作语言 3.1 插入语句(INSERT) 3.2 修改语句(UPDATE) 3.3 删除语句 3.3.1 DELETE命令 3.3.2 TRUNCATE命令 4 DQL 数据库查询语言 4.1 SELECT语句的简单使

    2024年01月20日
    浏览(25)
  • 小程序基础学习(请求封装)(重点,核心)

    目录  首先: 封装一个request请求的js文件,用的是Promise 然后: 请求编写 原理:首先在页面加载完成以后发送一次请求数据,由于请求的数据会反复使用,直接把他抽离到外面,以后直接调用。在使用async和await异步的方式接收请求的数据。最后在设置页面的宽高,并设置触

    2024年01月17日
    浏览(27)
  • 【操作系统】考研真题攻克与重点知识点剖析 - 第 1 篇:操作系统概述

    本文基础知识部分来自于b站:分享笔记的好人儿的思维导图与王道考研课程,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。 此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术有限,最终数据清洗结果不够理想,

    2024年02月07日
    浏览(43)
  • 零基础学鸿蒙编程-通过WebView打开网页

    WebView是用来打开网页的一种UI控件,可以在App内跳转到指定网址,而不是采用系统浏览器打开网页. activity 布局文件ability_main.xml: 增加权限 修改config.json,添加如下权限: https://gitee.com/hspbc/harmonyos_demos/tree/master/webviewDemo 《零基础学安卓编程》 《零基础学Java编程》 《零基础学鸿

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包