一、启动app
1、连接手机
2、启动 python -m weditor
3、以抖音为例,手机打开抖音
4、current: 获取当前包名和activity
控制台输入: uiautomator2 current
{
"package": "com.ss.android.ugc.aweme",
"activity": "com.ss.android.ugc.aweme.search.activity.SearchResultActivity"
}
5、通过包名打开抖音app
import uiautomator2 as u2
d = u2.connect('c6e989d7')
d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
d.app_stop("com.ss.android.ugc.aweme") #停止应用
二、打开一个干净的抖音app
如果我们想打开一个干净的app,可以使用app_clear 先清除app数据再打开
import uiautomator2 as u2
d = u2.connect('c6e989d7')
d.app_clear('com.ss.android.ugc.aweme')
d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
print(d.info)
三、定位
1、resourceId定位
import uiautomator2 as u2
d = u2.connect('c6e989d7')
d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
d(resourceId="com.ss.android.ugc.aweme:id/foj").click() #点击搜索按钮
2、className定位
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
d(className="android.widget.Button").click() #点击搜索按钮
3、description 定位
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
d(description="搜索").click() #点击搜索按钮
4、xpath定位
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/foj"]').click() #点击搜索按钮
5、text定位
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.app_start("com.ss.android.ugc.aweme")
d(resourceId="com.ss.android.ugc.aweme:id/foj").click() # 点击搜索按钮
d(text="搜索").click() #text定位
三、复杂一点的定位
1、通过父元素定位子元素
如上图,如果我们要定位图中2的元素时,再上几层级都有相同的元素,我们就可通过父级元素进行定位子级元素
import time
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.press('home') #先返回首页
d.app_start("com.ss.android.ugc.aweme") # 启动APP
d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
d.set_fastinput_ime(True) #切换输入法
d.send_keys('mangguo520')
print("点击搜索栏目")
d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
print("点击用户搜索")
d(text="用户").click()
time.sleep(3)
re = d(resourceId="com.ss.android.ugc.aweme:id/a0b").child(className="android.widget.FrameLayout")
print("re",re)
2、多个元素中,查找其中一个
查找一个android.widget.FrameLayout
re = d(className="androidx.recyclerview.widget.RecyclerView").child(className="android.widget.FrameLayout")[0].get_text()
或者
re = d(className="androidx.recyclerview.widget.RecyclerView").child(className="android.widget.FrameLayout").get_text()
不选择下标默认定位第一个元素
取第二个元素:
re = d(className="androidx.recyclerview.widget.RecyclerView").child(className="android.widget.FrameLayout")[1].get_text()
3、child_by_text 定位子元素
import time
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.app_start("com.ss.android.ugc.aweme") # 启动APP
d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
d.send_keys('mangguo520')
d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
d(text="用户").click()
time.sleep(3)
re = d(resourceId="com.ss.android.ugc.aweme:id/a0b").child_by_text('mangguo520',className="com.lynx.tasm.behavior.ui.text.FlattenUIText") #定位抖音号为xxx的元素
print("re",re)
4、child_by_description
import time
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.app_start("com.ss.android.ugc.aweme") # 启动APP
d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
d.send_keys('mangguo520')
d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
d(text="用户").click()
time.sleep(3)
re = d(resourceId="com.ss.android.ugc.aweme:id/a0b").child_by_description('mangguo520',className="com.lynx.tasm.behavior.ui.text.FlattenUIText")
print("re",re.get_text())
5、 siblings
通过兄弟定位
如图想关注某个抖音号为 aaaa,的用户,可现通过定位抖音号,再去查找它的兄弟“关注”按钮
import time
import uiautomator2 as u2
d = u2.connect('c6e989d7')
try:
d.app_stop("com.ss.android.ugc.aweme")
except:
pass
d.app_start("com.ss.android.ugc.aweme") # 启动APP
d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
d.send_keys('mangguo520')
d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
d(text="用户").click()
time.sleep(3)
re = d(text="mangguo520").sibling(text="关注",className="com.lynx.tasm.behavior.ui.view.UIView").click()