【appium】appium自动化入门之元素篇

今天上线发现还是有人对appium这块感兴趣的,先谢谢大家的关注和收藏了,您的收藏就是对我最大的支持
今晚也终于有空来水一下 文章了,这一次讲详细介绍appium中的元素定位

书接上文【appium】appium自动化入门之API(下)——两万字API长文,建议收藏
环境搭建篇【appium】appium自动化入门之环境搭建(上)

2.7 appium 元素定位

前言

appium 定位 app 上的元素,可以通过 ==id,name.class ==这些属性定位到

2.7.1 id 定位

  1. appium 的id属性也就是通过== UI Automator ==工具查看的 resource-id 属性
    2.
  2. 如上图的定位,就可以通过 id 来定位格式 :

driver.find_element_by_id(" #这 里 是 resource-id")

driver.find_element_by_id("#com.taobao.taobao:id/home_searchedit")

2.7.2 name 定位

  1. name 定位就是通过 UI Automator 工具查看的== text 属性== (注意的是:如果 text 属性为空,那就不能通过 name 属性定位了
    在这里插入图片描述

  2. 如上图的定位,就可以通过 name 来定位 格式:driver.find_element_by_name("#这里是 text") driver.find_element_by_name("#搭配新宠不能缺")

2.7.3 class 属性

  1. class 定位就是通过 UI Automator 工具查看的 class 属性
    在这里插入图片描述

  2. 如上图的定位,就可以通过 class 来定位
    格式 :driver.find_element_by_class_name("class 属 性 ") driver.find_element_by_class_name(“android.widget.EditText”)
    (注意的是:一般一个页面上的 class 属性不唯一,元素不唯一的话定位会报错了

2.7.4 accessibility_id

  1. accessibility_id 定位就是通过 UI Automator 工具查看的 content-desc 属 性(当然下图这个元素的 content-desc 属性为空,就不能通过这个属性定位了, 这里只是举个例子)
    在这里插入图片描述

  2. 如上图的定位,看到 content-desc 属性有值,就可以通过 accessibility_id 来定位了格式:driver.find_element_by_accessibility_id(“#content-desc 的值”) driver.find_element_by_accessibility_id(“#xxx”)
    (注:一般一个页面上的 class 属性不唯一,元素不唯一的话定位会报错了

一般来说上面的这几个定位的,相对而言比较基础,适合一些没代码基础,依靠工具来进行定位的同学

复杂一点的还可以通过== xpath 和 CSS定位==,八大元素里个人觉得就这两个是最全面好用的定位方式。
不过说起来也比较多,就不在这里面细讲了,需要这方面的视频教程可以点击并输入暗号:CSDN或者看大家的收藏吧,收藏高可以出一期八大元素定位专栏

2.8 native 和 webview 切换

前言

现在大部分 app 都是混合式的 native+webview模式,对应 native 上的元素通过 uiautomatorviewer 很容易定位到,webview 上的元素就无法识别了。

2.8.1 识别 webview

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

  2. 这时候可以查看元素属性,如右图它的 class 属性,上面写着 WebView,那毫 无疑问这种页面就是 webview 了。
    在这里插入图片描述

2.8.2 contexts

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

  2. 先获取页面是 contexts 环境,如下图红色区域,获取的是一个 list 列表:
    NATIVE_APP:这个就是 native,也就是原生的 WEBVIEW_com.xxxx :这个就是 webview

  3. 当看到打印出来有下图两个,就说明获取到 webview 的context 了(当然也有 的 app 有坑,可能明明有 webview,却通过 contexts 获取不到,这种需要特殊 处理了)
    在这里插入图片描述

2.8.3 切换到 webview

1.要想操作 webview 上的元素,第一步需要切换环境(跟 selenium 的切换 iframe, 切换 handle 思路是一样)
2.切换方法:switch_to.context(参数是 webview 的context) 由于第二步已经获取到 contexts 是一个 list 对象,取这个 list 的第二个参数 就行,也就是 contexts[1]
在这里插入图片描述

2.8.4 切回 native

  1. webview 上操作完后,想回到native 上操作,这时候需要先切回来,切回native 有两个方法:

方法一

driver.switch_to.context("NATIVE_APP")
 # 这个 NATIVE_APP 是固定的参数 

方 法 二 :

driver.switch_to.context(contexts[0]) 
 # 从 contexts 里取第一个参数 

2.8.5 参考代码

#coding:utf-8 
from appium import webdriver 
import time 
desired_caps = {
    
    'platformName': 'Android', 
'deviceName': '30d4e606', 
'platformVersion': '6.0', 
'appPackage': 'com.baidu.yuedu', 
'appActivity': 
'com.baidu.yuedu.splash.SplashActivity'} 
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) 
time.sleep(30) 
# 点图书按钮
driver.find_element_by_id("com.baidu.yuedu:id/righttitle").click() 
time.sleep(3) 
# 切换到图书界面后获取所有的环境 
contexts = driver.contexts 
print contexts 
# 切 换 到 webview 
driver.switch_to.context(contexts[1]) 
# 获取当前的环境,看是否切换成功 
now = driver.current_context 
print now 

# 切 回 native 
driver.switch_to.context(contexts[0])

#driver.switch_to.context("NATIVE_APP") 这样也是可以的
#获取当前的环境,看是否切换成功 
now = driver.current_context 
print now 

2.9 查看 webview 元素

前言

app 上webview 的页面实际上是启用的 chrome 浏览器的内核加载的,如何把手 机的网页加载到电脑上,电脑的 chrome 浏览器上有个开发模式 DevTools,是可 以方便调试的。

环境准备

1.手机上装一个 chrome 浏览器
2.电脑上装 chrome 浏览器
3.手机连电脑 第

2.9.1 启动 adb 服务

  1. 电脑上打开 chrome 浏览器输入:chrome://inspect/#devices
  2. 要是没加载到手机设备,就先启动 adb 服务,cmd 输入: >adb devices
    在这里插入图片描述

2.9.2 DevTools

1.电脑上打开 chrome 浏览器输入:chrome://inspect/#devices

2.Discover USB devices 这个要勾选的,可以检查到手机设备

3.Discover network targets 这个勾选,检查到网络

4.下图箭头指向的,是手机的设备名称

5.Webview in com.baidu.yuedu(39.0.00)这个是手机上浏览器的内核版本号 39 (一般电脑上的 chrome 版本号最好要大于等于这个版本号)
在这里插入图片描述

2.9.3 查看元素

  1. 上图红色框框的两个地址就是加载到的 webview 的网页地址了,点地址下的 inspect 按钮,进入调试界面 (注:这个是需要梯子的)

  2. 不会爬梯子的也没关系,把对应的 url 地址复制出来,重新打开一个浏览器标 签,输入地址后,按 F12 也可以进调试界面。

  3. 接下来的元素定位就跟 selenium 的定位是一回事了。
    在这里插入图片描述
    不清楚selenium元素定位的可以点击并输入暗号:CSDN问一下selenium元素定位的视频,或者等我完结appium的文章,再写appium吧(挖坑

2.9.4 手机版调试

  1. 上面浏览器打开的是 web 版页面,怎么弄成手机版调试呢?
    点下面箭头那个按钮,可以切换成手机版
    在这里插入图片描述

后话

最后的最后上述代码有出错的,可以先根据错误先百度查看一下,还是解决不了可以点击并输入暗号:CSDN,把你的问题截图发一下,会有大佬带你的在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Chaqian/article/details/109262791