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")

最新文章

  1. c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast
  2. Wireshark分析器分析数据流过程
  3. So easy Webservice 5.WSDL 文件说明
  4. JavaScript变量——栈内存or堆内存
  5. Google Guava学习笔记——基础工具类针对Object类的使用
  6. 2014--9=17 软工二班 MyEclipse blue==5
  7. 安装Android SDK时,点击SDK Manager.exe闪退,并且jdk的环境变量是对的。
  8. Reapter 添加删除按钮
  9. CQOI2015 选数
  10. Ehcache BigMemory: 摆脱GC困扰(转)
  11. sqlalchemy 使用
  12. 第二章 JavaScript案例(中)
  13. linux系统中的文件权限详解(转)
  14. linux应用编程之进程间同步
  15. linux 重定向命令详解(如1>/dev/null 2>&1)
  16. PowerDesigner导出word,PowerDesigner把表导出到word,PDM导出word文档
  17. BCB 串口控件的使用 TComm
  18. TroubleShoot: Enable Developer Mode in Windows 10 Insider Preview Build 10074
  19. Python并发讨论
  20. ffmpeg 入门教程

热门文章

  1. flex 居中
  2. iconfont字体图标的使用方法(转)
  3. (转)springBoot 配置信息一览
  4. shiro框架总结
  5. python关于字典如何格式化地写入文件之中
  6. Linux定时备份
  7. mpy开发物联网系列:1.mpy与服务器数据库方案
  8. 概率-拒绝采样 Rejection Sampling
  9. 利用Python获取文件类型
  10. Building Applications with Force.com and VisualForce (DEV401)(五):Application Essential: Introducing Business Logic