修改robotframework的元素定位方式,使之支持带括号的xpath定位方式

今天困扰我的一个问题终于解决了

robot框架默认的xpth定位方式是不支持带括号运算的xpth表达式的,例如:

(//*[@content-desc="iv_message_icon_2124"])[2]
这种带括号的xpth是不支持的

但是很奇怪的是appium原生是支持这种定位方式的,运行时报的错误也让人比较费解

不支持此种前缀

这个时候其实已经提示你了,运行的时候,对这种xpath定位表达式进行了拆分,导致定位不到

所以我们需要找到框架代码

修改robotframework的元素定位方式,使之支持带括号的xpath定位方式_第1张图片

从这里我们可以看出通过字符串里的起始字符串来进行判断分割的,所以我们将startwith替换成__contains__就可以了

elementfinder.py


    def _parse_locator(self, locator):
        prefix = None
        criteria = locator  
        if not locator.__contains__('//'):    
            locator_parts = locator.partition('=')
            if len(locator_parts[1]) > 0:
                prefix = locator_parts[0].strip().lower()
                criteria = locator_parts[2].strip()
        return (prefix, criteria)

 但是还需要修改一个地方

 修改robotframework的元素定位方式,使之支持带括号的xpath定位方式_第2张图片

至此就大功告成,快乐的用xpath进行定位吧

 

你可能感兴趣的:(修改robotframework的元素定位方式,使之支持带括号的xpath定位方式)