環(huán)境配置可以參考:https://github.com/openatx/uiautomator2
1.啟動夜神模擬器
不要開啟各種安全衛(wèi)士,不然夜神模擬器會莫名其妙的卡在99%處腺毫。將夜神模擬器改成手機(jī)版,一般默認(rèn)是平板摸袁。
2.在cmd下輸入:adb devices查看已連接設(shè)備。
正常情況下义屏,會有如下輸出靠汁,如果沒有,測試下adb有沒有加入到環(huán)境變量闽铐,在cmd里輸入adb蝶怔,或者adb version,是否報(bào)錯兄墅。
3.在cmd下輸入:python -m weditor
它會自動在瀏覽器打開一個窗口
Weditor旁邊默認(rèn)是Android踢星,如果不是,改回Android隙咸,往右填寫的是ip地址和端口號斩狱,如果是模擬器,就填寫第二步adb devices輸出的那個地址和端口扎瓶。點(diǎn)一下連接,如連接成功泌枪,旁邊會顯示稻穗概荷。灰色框里會出現(xiàn)夜神的界面碌燕。如果灰色框內(nèi)手機(jī)界面是黑屏误证,可以在模擬器里打開強(qiáng)制渲染,然后reload下Weditor修壕;如果還不行愈捅,重啟夜神模擬器;如果還不行慈鸠,執(zhí)行下圖框內(nèi)動作蓝谨。關(guān)于黑屏的以上不分先后,可循環(huán)多次執(zhí)行青团。在渲染開啟后如果黑屏消失譬巫,可以關(guān)了渲染。(下圖來自:github)
4.pycharm進(jìn)場
首先看下是否連接:
有信息輸出督笆,說明連接成功了芦昔。
5.獲取app名稱
上圖右側(cè)這些鍵值對都可以使用,這里先使用最簡單的位置信息娃肿,將下面的位置代碼復(fù)制一下并執(zhí)行也可以使用xpath
(d.xpath("http://android.widget.TextView[@text='考研幫']").click())
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
d.click(0.482, 0.532)
print(d.info)
將會看到考研幫APP已經(jīng)啟動了
在weditor里reload一下咕缎,讓兩者同步
然后定位下“跳過”的鍵值對珠十,備用。
現(xiàn)在代碼進(jìn)行到跳過這一步了凭豪,代碼如下:
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
d.click(0.482, 0.532)
d(resourceId="com.tal.kaoyan:id/tv_skip").click()
在模擬器里將應(yīng)用的數(shù)據(jù)清除下就可以執(zhí)行上面的代碼了
6.執(zhí)行登錄
和上面類似焙蹭,定位用戶名,密碼墅诡,登錄按鈕壳嚎,執(zhí)行代碼就好。在執(zhí)行之前先清理下應(yīng)用數(shù)據(jù)末早,或者在代碼里面加判斷烟馅。
代碼如下:
# -*- coding: utf-8 -*-
# @AuThor : frank_lee
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
# d.click(0.482, 0.532)
d.xpath("http://android.widget.TextView[@text='考研幫']").click()
d(resourceId="com.tal.kaoyan:id/tv_skip").click()
d(resourceId="com.tal.kaoyan:id/login_email_edittext").send_keys("starrymusic")
d(resourceId="com.tal.kaoyan:id/login_password_edittext").send_keys("我是密碼")
d(resourceId="com.tal.kaoyan:id/login_login_btn").click()
對于這種跳出的對我們無用的信息,我們需要跳過或叉掉然磷,叉掉前需要加以判斷郑趁,有沒有出現(xiàn)這些元素,如果沒出現(xiàn)而執(zhí)行了該動作勢必會報(bào)錯姿搜。
類比上述步驟寡润,可以使用代碼執(zhí)行登錄,并滑動“休閑空間”某個神奇的板塊
代碼如下:
# -*- coding: utf-8 -*-
# @AuThor : frank_lee
import uiautomator2 as u2
import time
# 連接模擬器
d = u2.connect('127.0.0.1:62001')
# 打開考研幫
try:
if d.xpath("http://android.widget.TextView[@text='考研幫']").wait(3):
d.xpath("http://android.widget.TextView[@text='考研幫']").click()
time.sleep(2)
except:
pass
# 點(diǎn)擊跳過頁面
try:
if d(resourceId="com.tal.kaoyan:id/tv_skip").wait(3):
d(resourceId="com.tal.kaoyan:id/tv_skip").click()
except:
pass
try:
# 實(shí)現(xiàn)登錄
if d(resourceId="com.tal.kaoyan:id/login_email_edittext").wait(2):
d(resourceId="com.tal.kaoyan:id/login_email_edittext").send_keys("starrymusic")
d(resourceId="com.tal.kaoyan:id/login_password_edittext").send_keys("我是密碼")
time.sleep(1)
d(resourceId="com.tal.kaoyan:id/login_login_btn").click()
time.sleep(2)
except:
pass
try:
# 下線通知
if d(resourceId="com.tal.kaoyan:id/tip_commit").wait(3):
d(resourceId="com.tal.kaoyan:id/tip_commit").click()
time.sleep(2)
# 發(fā)現(xiàn)新版本
if d(resourceId="com.tal.kaoyan:id/view_wemedia_cacel").wait(3):
d(resourceId="com.tal.kaoyan:id/view_wemedia_cacel").click()
time.sleep(2)
# 隱私條款
if d(resourceId="com.tal.kaoyan:id/tv_agree").wait(3):
d(resourceId="com.tal.kaoyan:id/tv_agree").click()
time.sleep(3)
# 下線通知
if d(resourceId="com.tal.kaoyan:id/tip_commit").wait(3):
d(resourceId="com.tal.kaoyan:id/tip_commit").click()
time.sleep(2)
except:
pass
try:
# 點(diǎn)擊下面社區(qū)板塊
if d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").wait(3):
d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").click()
time.sleep(0.5)
d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").click()
time.sleep(1)
# 上面為什么執(zhí)行兩次舅柜,規(guī)避彈出頁
# 點(diǎn)擊更多板塊
if d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").wait(3):
d(resourceId="com.tal.kaoyan:id/hotthread_recommend_moreforum").click()
time.sleep(1)
# 點(diǎn)擊休閑空間
if d(resourceId="com.tal.kaoyan:id/more_forum_title", text=u"休閑空間").wait(3):
d(resourceId="com.tal.kaoyan:id/more_forum_title", text=u"休閑空間").click()
time.sleep(2)
d(scrollable=True).scroll.to(text="玫瑰初相遇")
# 點(diǎn)擊'玫瑰初相遇'板塊
if d.xpath("http://android.widget.TextView[@text='玫瑰初相遇']").wait(3):
d.xpath("http://android.widget.TextView[@text='玫瑰初相遇']").click()
time.sleep(3)
# 執(zhí)行滑動動作梭纹,滑動20次
i = 0
while i < 10:
d(scrollable=True).scroll.toEnd(steps=50)
time.sleep(2)
d(scrollable=True).scroll.toEnd(steps=50)
time.sleep(2)
i += 1
except:
pass