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页面元素的更多相关文章

  1. 5、通过Appium Desktop实现页面元素定位

    之前我们已经安装了Appium Desktop,下面就让我们使用Appium Desktop实现页面元素定位 1.首先我们打开Appium Desktop,进入如下界面,点击Start Server ...

  2. web页面元素定位

    所有web网页中有8种元素定位方式 靠单一的特征找元素:6种(id,class_name,tag_name,name,link_text(2))组合各种特征和关系来找元素:2种(xpath,css) ...

  3. 用XPath定位Web页面元素时,如何快速验证XPath语句是否正确?

    在使用Selenium做Web UI自动化测试的过程中,XPath是一种定位页面元素的常用方式.然而,面对某些元素的XPath路径过于复杂,我们想快速验证拼凑的Xpath语句是否正确时,该怎么办呢?这 ...

  4. Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)

    一,问题 app自动化测试使用Android真机连接电脑时,通常会遇到两种情况: 1.测试机连接电脑会弹窗提示USB选项,选择USB用于"传输文件",有些手机不支持设置默认USB选 ...

  5. JS获取页面,元素,窗口和返回页面,元素,窗口的宽高以及滚动值

    jquery获取页面,元素,窗口的宽高以及滚动值 //获取浏览器显示区域(可视区域)的高度 : $(window).height(); //获取浏览器显示区域(可视区域)的宽度 : $(window) ...

  6. web自动化测试---web页面元素的定位

    selenium提供了很多用于定位元素的方法,首先我们自己需要知道元素有哪些属性,这就需要用到安装测试环境中firebug来定位 打开firefox浏览器,按下F12键,我们就可以看到如下图所示的界面 ...

  7. webveiw返回死循环问题以及在打开web页面会唤起浏览器打开的问题解决

    微信.QQ空间等大量软件都内嵌了H5,不得不说这是一种趋势,Andriod与H5互调可以让我们实现混合开发.至于混合开发就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为Html 5来开发 ...

  8. sellenium页面元素的定位方法

    1.findElements函数可用于多个元素定位 (1)使用ID定位:driver.findElement(By.id("ID值")); 例:HTML代码: 定位语句代码:Web ...

  9. DOM——获取页面元素

    获取页面元素 为什么要获取页面元素 例如:我们想要操作页面上的某部分(显示/隐藏,动画),需要先获取到该部分对应的元素,才进行后续操作 根据id获取元素 var div = document.getE ...

随机推荐

  1. 【Python】2.17学习笔记 移位运算符,逻辑运算符

    移位运算符 左移运算符 \(<<\),将对应的二进制数末尾补一颗零,高位自然溢出(遁入虚无 print( 5 << 2 ) 把\(5\)的二进制数左移两位 即把\(101\)变 ...

  2. 使用vue-router+vuex进行导航守卫(转)

    前言:想要实现登录后才能进入主页等其他页面,不然都会跳转到登录页.但是Vuex有个不够完美的地方,一旦刷新页面就会没了,所以还要用到localStorage. 一.router.js: import ...

  3. webpack学习(一):webpack的安装和命令行

    本教程可以学习到如下内容: 1.webpack的安装 2.利用webpack命令打包js文件 3.如何在js文件里面引用css并将css文件在页面里面生效 4.学习webpack相关的高级的一些参数, ...

  4. Android ListView显示访问WebServices返回的JSON结果

    1.WebServices的返回结果 2.ListView内容布局代码 <?xml version="1.0" encoding="utf-8"?> ...

  5. python对齐输出

    这个问题烦恼了挺久,一般情况下我都是用\t解决,但其实这样的办法并不是很nice,然后今天在写一个demo的时候实在看不下去,就百度科普了一波,确实是有比较nice的解决方案. 像这样: 令人十分难受 ...

  6. 洛谷1514 引水入域 dp+记忆化搜索

    题目链接:https://www.luogu.com.cn/problem/P1514 题意大致是:给定一个(n,m)的数值矩阵,可以在第一行建造水库,如果一个格子周围的某格子值小于它,那水就可以流到 ...

  7. python之道14

    看代码写结果: def wrapper(f): def inner(*args,**kwargs): print(111) ret = f(*args,**kwargs) print(222) ret ...

  8. OpenCV-Python ORB(面向快速和旋转的BRIEF) | 四十三

    目标 在本章中,我们将了解ORB的基础知识 理论 作为OpenCV的狂热者,关于ORB的最重要的事情是它来自" OpenCV Labs".该算法由Ethan Rublee,Vinc ...

  9. python中的可变和不可变对象 有序和无序对象

    可变对象和不可变对象的定义:对象存放在地址的值是否可以被改变 不可变对象包括:整形int.浮点型float .字符串str .元祖tuple.布尔型boole 可变对象包括 :列表list.集合set ...

  10. 武林高手?敏捷开发,唯velocity取胜

    去年学习软件工程教材,初识敏捷开发.目前所在的团队,也是使用敏捷开发方式.今天读了这篇文章,对于这段时间的效率有所警醒.其次,个人认同文章中的用户故事,结对编程思想. 文章援引:http://gitb ...