android xpath 测试,xpath · 安卓自动化测试利器:uiautomator2

xpath

xpath本身是一套独立的技术,常用于web领域内。

此处uiautomator2也支持xpath,用于元素定位,可以实现复杂条件的元素的查找。

xpath常见操作

定位节点和操作节点

tbsNodeList = self.driver.xpath("//com.tencent.tbs.core.webkit.WebView").all()

xpath的all()返回的是XMLElement而不是XPathSelector

self.driver.xpath("//com.tencent.tbs.core.webkit.WebView")返回的是uiautomator2.xpath.XPathSelector

而加上了all()后

self.driver.xpath("//com.tencent.tbs.core.webkit.WebView").all()

则返回的是:uiautomator2.xpath.XMLElement的list了

即,每一个都是uiautomator2.xpath.XMLElement,而不是uiautomator2.xpath.XPathSelector

其中每一个都是uiautomator2.xpath.XMLElement

然后就可以去操作属性了:

获取属性content-desc的值

eachXmlElem.attrib.get("content-desc", "")

给属性content-desc设置值

eachXmlElem.attrib["content-desc"] = "add something to avoid NAF"

删除一个属性

eachXmlElem.attrib.pop("NAF")

文档

关于Xpath的详细用法,见官网中的:

其内部用的lxml,具体功能和语法都可以参考:

查找元素 相关函数

findAndClickNode:查找当前节点的父级符合条件的节点 并点击

def findAndClickNode(self, curNodeXpath):

"""

寻找可以clickable=true的当前或父级元素,并点击

注:主要用于当节点clickable=false,点击无效时,使用此方法

"""

foundAndClicked = False

matchDict = {"clickable": "true"}

clickableParentNode = self.findParentNode(curNodeXpath=curNodeXpath, matchDict=matchDict)

if clickableParentNode:

foundNodeAttrib = clickableParentNode.attrib

clickableParentNode.click()

foundAndClicked = True

logging.info("clicked element [%s] found by [xpath=%s, match=%s]", foundNodeAttrib, curNodeXpath, matchDict)

else:

logging.warning("Fail click %s for not found %s(parent) node", curNodeXpath, matchDict)

return foundAndClicked

调用:

if curNodeXpath:

foundAndClicked = self.findAndClickNode(curNodeXpath)

相关函数:

findParentNode:寻找父节点

def findParentNode(self, curNodeXpath, matchDict, maxUpLevel=3):

"""

寻找符合特定条件的父级节点,最多向上找3级

如果当前节点符合条件,则返回当前节点

"""

matchNode = None

try:

curNode = self.driver.xpath(curNodeXpath).get()

curNodeAttrib = curNode.attrib # .attrib contain 'clickable'

# curNodeInfo = curNode.info # .info not contain 'clickable'

isCurMatch = self.isMatchNode(curNodeAttrib, matchDict)

if isCurMatch:

# cu

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值