zoukankan      html  css  js  c++  java
  • 解决appium升级后不支持使用name定位的问题

    前言

    之前一直用的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。

    640?wx_fmt=png

    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
    

    问题完美解决

  • 相关阅读:
    无根树转有根树
    HDU(1853),最小权匹配,KM
    一位10年Java工作经验的架构师聊Java和工作经验
    一位资深程序员大牛给予Java初学者的学习路线建议
    Java基础部分全套教程.
    假如时光倒流,我会这么学习Java
    一位10年Java工作经验的架构师聊Java和工作经验
    一位资深程序员大牛给予Java初学者的学习路线建议
    Java基础部分全套教程.
    成为一名JAVA高级工程师你需要学什么
  • 原文地址:https://www.cnblogs.com/finer/p/11895079.html
Copyright © 2011-2022 走看看