7.0 啟動app權限彈窗問題
這裏提供兩種解決方案!
1.安卓6.0+是可以直接利用uiautomator定位元素點擊!這個不細說,定位方式很多種...這個等待時間大家自己定大概兩到三秒即可!
#安卓6.0+點擊方式
driver.find_element_by_android_uiautomator(‘new UiSelector().textContains("允許")‘)
但是一般來說彈窗大多數都是好多個---利用顯示等待:啟動app之後,在三秒內 沒0.5秒尋找一次元素,如果存在則點擊,不存在則報錯直接pass
try: while True: Element = ("xpath", "//*[contains(@text,‘允許‘)]") ac = WebDriverWait(driver, 3, 0.5).until(lambda driver:driver.find_element_by_xpath(‘//*[contains(@text,"允許")]‘)) ac.click() except: pass
2.還有一種定位方式如下,親測支持高版本,但是我沒有親自試過是否支持低版本手機的權限彈窗-----因為我不是用的這兩種---個人用的方法比較簡單粗暴+直接
但是呢,這裏建議大家搞個低版本的手機試下,我沒測是因為條件不允許,找不到低版本的手機.......希望有朋友測了之後截圖留言一波,讓我有個底....
try: while True: Element = ("xpath", "//*[contains(@text,‘允許‘)]") ac = WebDriverWait(driver, 1, 0.5).until(EC.presence_of_element_located(Element)) ac.click() except: pass
-
- 然後手動給每臺手機安裝一遍app,並用記事本獲其他玩意記下設備名稱
-
- 打開app,準備好uiautomatorview(sdk目錄下那個定位元素的玩意..),如下圖所示記住這個坐標,如:
admin_lists={‘2905bdb6‘:[360,1149],‘xxxx‘:[1,1]},如果定位不到【允許】這個坐標,就手動點一下允許,按照不動,你會發現在屏幕最上面有一個坐標DX:--/DY:--,記下這個坐標也是一樣的!
- 打開app,準備好uiautomatorview(sdk目錄下那個定位元素的玩意..),如下圖所示記住這個坐標,如:
admin_list={‘2905bdb6‘:[(360,1149)],‘xxxx‘:[(1,1)]} for a in admin_list: deviceList=‘‘.join(os.popen(‘adb devices‘).readlines()) Device=re.findall(r"(.+?)\t",deviceList)[0] print(Device) if a==Device: driver.tap(admin_list[a])
原理就是先把我們測試機彈出權限允許的那個坐標給記錄下來,第一次安裝啟動的時候查詢一下設備名稱然後取到坐標,然後點擊---這個方法也是適合多設備
方法有點撈,但是實用靠譜---另外這裏不要想著去適配屏幕,這個不存在的,據我了解不同手機的彈窗樣式可能是不一樣的..
如果只彈出一個-直接用上面的方法就可以了,但是如果權限彈窗有多個呢:
加個方法就可以了---有多個的話,這個就得根據自己的app調試了...但是大同小異
如下所示:
admin_list={‘2905bdb6‘:[(360,1149)],‘xxxx‘:[(1,1)]} for a in admin_list: deviceList=‘‘.join(os.popen(‘adb devices‘).readlines()) Device=re.findall(r"(.+?)\t",deviceList)[0] print(Device) if a==Device: for i in range(5): driver.tap(admin_list[a]) time.sleep(3)
具體應該還有很多騷方法--大家可以自己研究一下,只要能實現就可以,我個人方面對於執行效率並沒有太過--(想不到詞了)
這章有一定的python語法:
循環、正則、os、range、readlines、dict取值----如果這個不太懂得-建議看下 廖雪峰的python3教程---直接百度廖雪峰就可以了
7.0 啟動app權限彈窗問題