使用webview查找元素,appium查找web页面元素

9 webview查找元素

9.1 webview 简介

     WebViewandroid中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。

9.2 移动端应用

移动端,一般分为三种应用:

Native应用:就是安卓的原生应用,普通APP。文件自带的文件管理、设置等APP

Web应用:需要依托浏览器展示的网页应用,比如微信里的公众号、商城

混合应用:也就是结合了原生和网页应用,在原生应用中嵌入网页。很多APP都是这样的,比如淘宝等

 

那么为什么是要使用webview呢?前面第二章讲过UIAutomatorViewer的使用,UIAutomatorViewer是用来识别安卓原生应用的,它识别不到web网页的内容。所以如果你要测试的APP有网页应用,就需要用到webview来识别控件的idname等信息。

ps:如果确定这个APP的页面是不是网页,一般情况下,长按文字可以出现复制粘贴的,网络不好的时候会出现一个缓慢加载的过程等一般都是web应用。

9.3使用webview查找元素

第一种方式需要FQ:

1.将手机连接到电脑上,打开USB调试,去cmd中输入adb devices会显示你的设备已连接 

 

2.然后你打开要测试的网页版的APP,比如我打开微信里的一个商城

3.从电脑端,打开chrome浏览器,输入chrome://inspect,打开,会显示你的手机型号,以及你打开的网页

 

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

4.点击inspect,就会出来如图:

 

 

5.点击图中的箭头,左侧是页面,右侧显示的是控件的信息。想看哪个APP,在手机上打开哪个APP即可。

如果不能FQ,还有一个方法就是将网页链接复制到电脑的浏览器,从电脑浏览器打开网页,点击右键--检查/查看元素,也可以找到元素信息。和之前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': '10',
    '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")

 

posted @ 2020-04-15 10:52  白杨的博客  阅读(2208)  评论(0编辑  收藏  举报