name定位

driver.find_element_by_name('飞利浦净水').click()

测试结果报错:selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy 'name' is not supported for this session

一开始以为写错了,后面通过搜索资料才知道,name这个定位方法,appium从1.5版本后就已经抛弃了。。。

所以可以通过其他定位方式来完成。

classname定位

driver.find_element_by_class_name('android.widget.TextView').click()

这种定位方式也是有弊端的,如果当界面class元素是唯一的时候是可以用的,但是如果页面有多个class是一样的,这时候就可能只操作页面元素的第一个。

相对定位

先找到元素的父元素节点,再通过父元素进行元素定位

root_element=driver.find_element_by_id('id')
root_element.find_element_by_class_name('android.widget.TextView').click()

Xpath定位

通过id

driver.find_element_by_xpath('//*[@resource-id="com.taobao.taobao:id/home_searchedit"]').click()

通过text

driver.find_element_by_xpath('//*[@text="XXXX"]').click()

通过class,两种写法

driver.find_element_by_xpath('//android.widget.TextView’).click()

driver.find_element_by_xpath('//[class="android.widget.TextView"]').click()

通过组合

driver.find_element_by_xpath('//android.widget.TextView[@text="XXXX"]’).click()

driver.find_element_by_xpath('//*[@text="XXXX" and @index="num"]').click()

List定位

主要使用find_elements_by_XXX来获取一组相同class属性的元素,然后通过数组下标来控制的定位。

比如如上截图,定位到飞利浦标签的时候,有很多个相同的TextView,这时候可以这样来定位,先用xpath定位到此元素,再用数据

d=driver.find_elements_by_xpath('//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.View/android.support.v7.widget.RecyclerView/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView')
d[0].click() #定位到飞利浦净水 d[1].click() #定位到行李箱

UIautomator定位

是Android系统原生支持的定位方式,和xpath类似,且支持元素的所有属性定位,Appium元素定位也是基于Uiautomator进行封装的,so定位也是很强大。

使用到方法是find_element_by_android_uiautomator(),还有UiSelector()

定位搜索框为例子:

#id定位

driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.taobao.taobao:id/home_searchedit")').click()

#text定位

driver.find_element_by_android_uiautomator('new UiSelector().text("超滤净水器 家用")').click()

#classname定位(如果有多个class元素则定位第一个)

driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView")').click()

python+Appium自动化:各种元素定位方法的更多相关文章

  1. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  2. Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法

    在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...

  3. 基于appium的常用元素定位方法

    一.元素定位工具 app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位. 1.uiautomatorviewe ...

  4. python+appium 自动化2--元素定位uiautomatorviewer

    出处:https://www.cnblogs.com/yoyoketang/p/6128741.html 前言: 可以打开手机上的app了,下一步元素定位uiautomatorviewer,通过定位到 ...

  5. Robotframework + Appium 之常用元素定位方法

    任何自动化测试,其实手动测试也是一样的,元素定位(目标定位)是首要任务,这是最直接的测试对象呀! 好了,废话不多说,又到了元素定位啦,之前我们已经介绍过selenium及appium常用的定位方法,下 ...

  6. 关于UI自动化IOS元素定位方法说明

    1. 元素属性介绍 下图是通过weditor定位的微博的"我的钱包",各属性如下图: className:元素类型,如:XCUIElementTypeButton isEnable ...

  7. python3+Appium自动化12-H5元素定位环境搭建

    前言 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原生控件进行元素 ...

  8. [python爬虫] Selenium常见元素定位方法和操作的学习介绍

    这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...

  9. python ui自动化之元素定位和常用操作

    做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...

  10. selenium python (二) 元素定位方法

    定位的原则就是:id name class 优先,强烈建议和前端哥哥搞好关系.定位就不是问题:实在不行就xpath和css大部分偶可以定位到. webdriver定位的方法是通过一个By类,By类中有 ...

随机推荐

  1. 《机器学习实战(基于scikit-learn和TensorFlow)》第七章内容学习心得

    本章主要讲述了“集成学习”和“随机森林”两个方面. 重点关注:bagging/pasting.boosting.stacking三个方法. 首先,提出一个思想,如果想提升预测的准确率,一个很好的方法就 ...

  2. 论文阅读 | ERNIE: Enhanced Representation through Knowledge Integration

    摘要 知识加强的语义表示模型. knowledge masking strategies  :  entity-level  masking   / phrase-level masking    实 ...

  3. Capacity To Ship Packages Within D Days

    A conveyor belt has packages that must be shipped from one port to another within D days. The i-th p ...

  4. 解决Win7上的连接access数据库的问题

    最近做了一个win桌面程序,没有用sql 数据库,而是用access数据库,因为access比sql用起来方便多了,最主要是不要安装sql server,直接放在程序里面,然后创建连接字符就可以了,s ...

  5. FileSystemResource 找不到文件

    环境 Spring 3.2.5.RELEASE 原因 使用 FileSystemResource 加载文件的过程中,发现一个奇怪的现象,路径完全正确,但是找不到文件的情况.可能的原因是文件的路径上有压 ...

  6. Spring4学习回顾之路06- IOC容器中Bean的生命周期方法

    SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建 ...

  7. hard or 9102 字符串DP---Educational Codeforces Round 57 (Rated for Div. 2)

    题意:http://codeforces.com/problemset/problem/1096/D 思路:参考:https://blog.csdn.net/qq_41289920/article/d ...

  8. lua的数据类型

    Lua 是动态(弱)类型的语言,它有一下几种数据结构: nil(空) nil 类型表示一种没有任何有效值,它只有一个值 -- nil,例如打印一个没有赋值的变量,便会输出一个 nil 值: print ...

  9. codeforce C. Success Rate

    写完这道题目才发现自己对二分的理解太浅了 这题是典型的利用二分“假定一个问题可行并求最优解” 二分是通过不断缩小区间来缩小解的范围,最终得出解的算法 我们定义一个c(x) 表示判断函数 如果对任意y& ...

  10. 24-Perl 数据库连接

    1.Perl 数据库连接本章节我们将为大家介绍 Perl 数据库的连接.Perl 5 中我们可以使用 DBI 模块来连接数据库.DBI 英文全称:Database Independent Interf ...