前言

之前一直用的appium1.4版本,最近升级到了1.6突然发现之前的脚本好多都跑失败了,一看报错:

selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy 'name' is not supported for this session

查了资料才发现,在appium1.5之后,by name的这种定位方式已经彻底移除。。。脑阔疼,又要大改代码了。

突然想到之前通过name定位的方法,被我写在公共方法里面的:


def get_name(name):
'''
定位页面text元素
:param name:
:return:
'''
element = driver.find_element_by_name(name)
return element

实际上,只要改一下这个 get_name的公共方法就可以,而不用去修改所有代码,庆幸。

改进

上帝为你关上一扇门,必然为你打开一扇。同样appium也是如此,为你移除一种定位方式,必然有另一种定位方式可以代替他,遂转向万能的xpath。

image.png

xpath语法

简单了解一下xpath语法,主要有如下表达式:

表达式 描述
nodename 选择节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
常用通配符
通配符 描述
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点

对于上图的text元素我们就可以写成:

//*[@text='通讯录']

更严谨点,可以写成:

//android.widget.TextView[@text='通讯录']

so,以前的定位方式就改进完成了,代码如下:

def get_name(name):
'''
定位页面text元素
:param name:
:return:
'''
# element = driver.find_element_by_name(name)
# return element
element = driver.find_element_by_xpath("//*[@text='%s']")%(name)
return element

问题完美解决

解决appium升级后不支持使用name定位的问题的更多相关文章

  1. 解决IE升级后必须以管理员运行的问题

    很多网友可能都遇到过这样的问题,在ie升级后,无法打开,必须以管理员身份运行.今天我也遇到了这个问题.最终找到了解决办法. 1.Win + R 2.输入 regedit,定位到 HKEY_CURREN ...

  2. Appium升级后安装UnicodeIME-debug.apk 提示

    使用appium1.8 ,启动app过程中报错: 2018-05-08 17:09:16:890 - [W3C] Encountered internal error running command: ...

  3. 如何解决python升级后yum报错

    当我们yum命令的时候,会提示 "File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxEr ...

  4. 解决MacOS升级后出现xcrun: error: invalid active developer path, missing xcrun的问题

    升级了系统 命令行不能用了 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), mis ...

  5. 解决mac升级后,出现的 xcrun: error: invalid active developer path, missing xcrun 错误

    最近升级了mac系统,然后接着写代码就出问题了. 报错信息如下: xcrun: error: invalid active developer path (/Library/Developer/Com ...

  6. 解决xcode5升级后,Undefined symbols for architecture arm64:问题

    The issue is that the cocoapods have not been built for arm64 architecture yet thus they cannot be l ...

  7. 三步解决fiddler升级后https无法通过证书验证问题

    有时候使用fiddler时,https页面会出现错误提示,我们可以这样设置来避免错误 第一步:去掉https的抓取 Tools>Option 去掉Capture HTTPS CONNECTs 的 ...

  8. 解决vim升级后导致的高亮行行好有下划线问题,

    在自己的guodersert.vim中添加下面一行即可 hi CursorLineNr term=bold cterm=NONE ctermfg=darkgreen gui=bold guifg=Ye ...

  9. 不支持find_element_by_name元素定位方法,抛不支持find_element_by_name元素定位方法,会抛如下错误 org.openqa.selenium.InvalidSelectorException: Locator Strategy 'name' is not supported for this session的解决

    appium1.5后不支持find_element_by_name元素定位方法,会抛如下错误 org.openqa.selenium.InvalidSelectorException: Locator ...

随机推荐

  1. 测试浏览器是否支持JavaScript脚本

    如果用户不能确定浏览器是否支持JavaScript脚本,那么可以应用HTML提供的注释符号进行验证.HTML注释符号是以 <-- 开始以 --> 结束的.如果在此注释符号内编写 JavaS ...

  2. 1.docker 的 安装

    1.mac 安装docker 1.1 打开 https://docs.docker.com/docker-for-mac/install/ 1.2 下载 dmg 文件 1.3  打开 docker,d ...

  3. git的基础使用

    GIT """ 什么是git:版本控制器 - 控制的对象是开发的项目代码 代码开发时间轴:需求1 > 版本库1 > 需求2 > 版本库2 > 版本 ...

  4. LeetCode——542. 01 矩阵

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 ...

  5. 理解ClassLoader工作机制

    package com.ioc; public class Test { public static void main(String[] args) throws ClassNotFoundExce ...

  6. Java中的堆、栈、方法区

    堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对 ...

  7. [原]CreateFile中的dwShareMode

    原 总结 API  一直对CreateFile的参数dwDesiredAccess和dwShareMode有什么不同不是很清楚,今天重读 windows核心编程的时候终于豁然开朗了. 真是书读百遍,其 ...

  8. Android之布局LinearLayout

    1.weight属性用法 主要用于view对象屏幕适配比例 如下图,左边是等比例,右边是1:2比例 实现代码: <LinearLayout xmlns:android="http:// ...

  9. linux下U盘变成只读文件系统的修复

    问题描述: U盘插入linux下后变成了只读文件系统,不能再往u盘里拷贝文件. 总结:产生这个问题的原因可能是u盘文件系统损坏,操作系统为了防止它损坏系统,将它设置成了只读 修复方法: 在window ...

  10. JSP中request对象常用方法汇总

    setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值 getAt ...