使用webview查找元素,appium查找web页面元素
9 webview查找元素
9.1 webview 简介
WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。
9.2 移动端应用
移动端,一般分为三种应用:
Native应用:就是安卓的原生应用,普通APP。文件自带的文件管理、设置等APP
Web应用:需要依托浏览器展示的网页应用,比如微信里的公众号、商城
混合应用:也就是结合了原生和网页应用,在原生应用中嵌入网页。很多APP都是这样的,比如淘宝等
那么为什么是要使用webview呢?前面第二章讲过UIAutomatorViewer的使用,UIAutomatorViewer是用来识别安卓原生应用的,它识别不到web网页的内容。所以如果你要测试的APP有网页应用,就需要用到webview来识别控件的id、name等信息。
ps:如果确定这个APP的页面是不是网页,一般情况下,长按文字可以出现复制粘贴的,网络不好的时候会出现一个缓慢加载的过程等一般都是web应用。
9.3使用webview查找元素
第一种方式需要翻墙:
1.将手机连接到电脑上,打开USB调试,去cmd中输入adb devices会显示你的设备已连接

2.然后你打开要测试的网页版的APP,比如我打开微信里的一个商城
3.从电脑端,打开chrome浏览器,输入chrome://inspect,打开,会显示你的手机型号,以及你打开的网页

注意:1.如果你查找的不是web网页,webview是不会显示的,所以如果没显示,首先看下自己的页面是不是网页版;2.如果连手机型号都没出来,那说明手机没有连接上,重新关闭usb调试再打开试试,还是不行确定一下自己的驱动是不是装好了;3.这个只能适用安卓4.4版本以上的手机
4.点击inspect,就会出来如图:

5.点击图中的箭头,左侧是页面,右侧显示的是控件的信息。想看哪个APP,在手机上打开哪个APP即可。
如果不能翻墙,还有一个方法就是将网页链接复制到电脑的浏览器,从电脑浏览器打开网页,点击右键--检查/查看元素,也可以找到元素信息。和之前selenium一样。
9.4 appium查找网页元素
找到了元素信息后,如何写代码让appium自动去找呢?
连接手机的代码和find_element_XX都是一样的,只是有一个地方需要注意,appium默认都是按照原生应用查找的,如果想让它查找网页应用,就要告诉它接下来要查找网页应用了,用switch_to.context()方法:
#coding=utf-8
from appium import webdriver
import time """连接手机,获取driver"""
server = r'http://localhost:4723/wd/hub' # Appium Server, 端口默认为4723
desired_capabilities = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '',
'appPackage': 'com.ddsy.songyao',
'appActivity': '.activity.MainActivity',
'unicodeKeyboard': True,
'reserKeyBoard': True,
'noReset': True,
'fullReset': False
}
driver = webdriver.Remote(server, desired_capabilities) # 连接手机和APP
time.sleep(3) # 点击首页某个元素进入到某个网页版页面
driver.find_element_by_xpath("//*[contains(@bounds, '[360,676][720,837]')]").click()
time.sleep(5) # 获取当前网页页面的contexts
contexts = driver.contexts
for i in contexts:
print(i) # 打印的contexts结果:
# NATIVE_APP # 一般情况原生的应用都是这个context
# WEBVIEW_com.android.browser
# 网页应用的context都是‘WEBVIEW_’开头的
# 如果你的当前页面是原生的,那么只会打出来NATIVE_APP # 告诉appium接下来找到元素是网页的元素 driver.switch_to.context("WEBVIEW_com.android.browser")
# 下面的方法就一样了 driver.find_element_by_id("网页元素的id").click() driver.find_element_by_xpath("//*[contains(@text, 'xxx").sendkeys('xx') #接下来回到原生应用 driver.switch_to.context("NATIVE_APP") driver.find_element_by_id("安卓原生的id")
使用webview查找元素,appium查找web页面元素的更多相关文章
- 5、通过Appium Desktop实现页面元素定位
之前我们已经安装了Appium Desktop,下面就让我们使用Appium Desktop实现页面元素定位 1.首先我们打开Appium Desktop,进入如下界面,点击Start Server ...
- web页面元素定位
所有web网页中有8种元素定位方式 靠单一的特征找元素:6种(id,class_name,tag_name,name,link_text(2))组合各种特征和关系来找元素:2种(xpath,css) ...
- 用XPath定位Web页面元素时,如何快速验证XPath语句是否正确?
在使用Selenium做Web UI自动化测试的过程中,XPath是一种定位页面元素的常用方式.然而,面对某些元素的XPath路径过于复杂,我们想快速验证拼凑的Xpath语句是否正确时,该怎么办呢?这 ...
- Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)
一,问题 app自动化测试使用Android真机连接电脑时,通常会遇到两种情况: 1.测试机连接电脑会弹窗提示USB选项,选择USB用于"传输文件",有些手机不支持设置默认USB选 ...
- JS获取页面,元素,窗口和返回页面,元素,窗口的宽高以及滚动值
jquery获取页面,元素,窗口的宽高以及滚动值 //获取浏览器显示区域(可视区域)的高度 : $(window).height(); //获取浏览器显示区域(可视区域)的宽度 : $(window) ...
- web自动化测试---web页面元素的定位
selenium提供了很多用于定位元素的方法,首先我们自己需要知道元素有哪些属性,这就需要用到安装测试环境中firebug来定位 打开firefox浏览器,按下F12键,我们就可以看到如下图所示的界面 ...
- webveiw返回死循环问题以及在打开web页面会唤起浏览器打开的问题解决
微信.QQ空间等大量软件都内嵌了H5,不得不说这是一种趋势,Andriod与H5互调可以让我们实现混合开发.至于混合开发就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为Html 5来开发 ...
- sellenium页面元素的定位方法
1.findElements函数可用于多个元素定位 (1)使用ID定位:driver.findElement(By.id("ID值")); 例:HTML代码: 定位语句代码:Web ...
- DOM——获取页面元素
获取页面元素 为什么要获取页面元素 例如:我们想要操作页面上的某部分(显示/隐藏,动画),需要先获取到该部分对应的元素,才进行后续操作 根据id获取元素 var div = document.getE ...
随机推荐
- C/C++书籍分享(百度网盘版)
作为第一篇博客,该写一些什么好呢,毕竟作为技术博客开创的,不能随便闲谈不是. 那就分享一些书籍作为见面礼吧.链接里面包含有大量的C++学习用书籍,包含了从入门到进阶的大部分高质量书籍,注意仅用作个人学 ...
- 大数据安装之Kafka(用于实时处理的消息队列)
一.安装部署kafka 1.集群规划 hadoop102 hadoop103 hado ...
- 部署harbor以https模式和k8s对接
集群时间同步 我们在之前的kubeasz部署高可用kubernetes1.17.2 并实现traefik2.1.2部署篇已经实现了基于chrony的时间同步 [root@bs-k8s-master01 ...
- CVE-2019-17564:Apache Dubbo反序列化漏洞复现
0x00 漏洞背景 ①iiDubbo是一款高性能.轻量1级的开源java Rpc分布式服务框架. ②核心功能: ◉ 面向接口的远程过程调用 ◉ 集群容错和负载均衡 ◉ 服务自动注册与发现 ③特点: ◉ ...
- Django 处理跨域的配置、前台处理ajax
一. Django处理跨域 跨域的处理方式有很多,使用最多的就是CORS(跨域资源共享),接下来大致提一下django中处理跨域的配置. 首先安装django-cors-headers模块: pip ...
- MySQL----多表操作
##多表之间的关系 1.一对一(了解) * 如:人和身份证 * 分析:一个人只有一个身份证,一个身份证只能对应一个人. 2.一对多(多对一) * 如:部门和员工 * 分析:一个部门有多个员工,一个员工 ...
- 【Code Force】Round #589 (Div. 2) D、Complete Tripartite
题目链接 大致题意 把一个图分成三块,要求任意两块之间是完全图,块内部没有连线 分析 首先根据块内没有连线可以直接分成两块 假定点1是属于块1的,那么所有与点1连接的点,都不属于块1:反之则是块1的 ...
- 超参数、验证集和K-折交叉验证
本文首发自公众号:RAIS 前言 本系列文章为 <Deep Learning> 读书笔记,可以参看原书一起阅读,效果更佳. 超参数 参数:网络模型在训练过程中不断学习自动调节的变量,比如 ...
- OpenCV-Python 直方图-1:查找、绘制和分析 | 二十六
目标 学会 使用OpenCV和Numpy函数查找直方图 使用OpenCV和Matplotlib函数绘制直方图 你将看到以下函数:cv.calcHist(),np.histogram()等. 理论 那么 ...
- K8S 资源收集和展示 top & DashBoard-UI
一.前言 在近期的 K8S 开发调试的过程中,总会想知道 Node 或者 Pod 的更多信息.但 $ kubectl top node $ kubectl top pod 中的 top 操作符,需要 ...