openatx / uiautomator2

Android Uiautomator2 Python Wrapper
MIT License
6.48k stars 1.39k forks source link

使用.child("")后,原XPathSelector对象的xpath表达式被永久修改. #942

Closed pkilller closed 6 months ago

pkilller commented 7 months ago

测试代码:

import uiautomator2 as u2
import time
d = u2.connect()

container = d.xpath('//*[@resource-id="com.google.android.apps.messaging:id/list_empty_view"]')
print("Container: " + str(container))

child = container.child('//*[@resource-id="com.google.android.apps.messaging:id/empty_image_hint"]') # 这句调用后,container中的xpath表达式被修改了
print("Child    : " + str(child))

print("Container: " + str(container))

输出结果:

Container: XPathSelector(//*[@resource-id="com.google.android.apps.messaging:id/list_empty_view"]
Child    : XPathSelector(//*[@resource-id="com.google.android.apps.messaging:id/list_empty_view"]//*[@resource-id="com.google.android.apps.messaging:id/empty_image_hint"]
Container: XPathSelector(//*[@resource-id="com.google.android.apps.messaging:id/list_empty_view"]//*[@resource-id="com.google.android.apps.messaging:id/empty_image_hint"]

总结: 按照我的理解,child()被调用后,应该产生一个新的隔离对象,不影响原来的container才合理。我目前只能在使用玩child()后,重新获取container来临时过渡。

感谢大佬们抽空处理!

codeskyblue commented 6 months ago

这确实是个问题

codeskyblue commented 6 months ago

https://github.com/openatx/uiautomator2/commit/4b849e5aedfd2d69c342518d5588c9dfdcc770aa

pkilller commented 6 months ago

4b849e5

感谢大佬!