九宮格是一種比較常見的圖案加密方式驻粟,目前很多App都支持設(shè)置圖案鎖然评,Android原生系統(tǒng)也支持設(shè)九宮格圖案鎖屏尘惧。那么我們該如何使用Appium進(jìn)行滑動(dòng)操作呢炬转?
測試場景
1科阎、安裝app
2述吸、啟動(dòng)app
3、登錄后設(shè)置九宮格密碼
環(huán)境準(zhǔn)備
- python
- appium
- 安卓手機(jī)
- 測試app(鼠貸金融)
實(shí)例
這里實(shí)現(xiàn)主要是用到appium的TouchAction模塊锣笨。
TouchAction簡介
Touch Action包含一些列操作蝌矛,比如按壓、長按错英、點(diǎn)擊入撒、移動(dòng)、暫停走趋。由著些不同操作可以組成一套動(dòng)作衅金。使用TochAction需要先導(dǎo)入對應(yīng)的模塊
from appium.webdriver.common.touch_action import TouchAction
按壓
方法:press() 開始按壓一個(gè)元素或坐標(biāo)點(diǎn)(x,y)。通過手指按壓手機(jī)屏幕的某個(gè)位置簿煌。 press也可以接收屏幕的坐標(biāo)(x,y)氮唯。
語法:press(self, element=None, x=None, y=None)
實(shí)例:TouchAction(driver).press(x=0,y=308)
長按
方法:longPress() 開始按壓一個(gè)元素或坐標(biāo)點(diǎn)(x,y)。 相比press()方法姨伟,longPress()多了一個(gè)入?yún)⒊土穑热婚L按,得有按的時(shí)間吧夺荒。duration以毫秒為單位瞒渠。1000表示按一秒鐘良蒸。其用法與press()方法相同。
語法:long_press(self, element=None, x=None, y=None, duration=1000)
點(diǎn)擊
方法:tap() 對一個(gè)元素或控件執(zhí)行點(diǎn)擊操作伍玖。用法參考press()嫩痰。
語法:tap(self, element=None, x=None, y=None, count=1)
移動(dòng)
方法:move_to() 將指針從上一個(gè)點(diǎn)移動(dòng)到指定的元素或點(diǎn)。
語法:move_to(self, element=None, x=None, y=None)
注意:移動(dòng)到目位置有時(shí)是算絕對坐標(biāo)點(diǎn)窍箍,有時(shí)是基于前面一個(gè)坐標(biāo)點(diǎn)的偏移量串纺,這個(gè)要結(jié)合具體App來實(shí)踐。
暫停
方法:Wait()
實(shí)例:wait(1000)
暫停腳本的執(zhí)行椰棘,單位為毫秒纺棺。
釋放
方法release() 結(jié)束的行動(dòng)取消屏幕上的指針。
語法:release()
執(zhí)行
perform() 執(zhí)行的操作發(fā)送到服務(wù)器的命令操作邪狞。
語法:perform()
代碼實(shí)現(xiàn)
from appium import webdriver
from time import sleep
import os
from appium.webdriver.common.touch_action import TouchAction
# 獲取項(xiàng)目的根目錄路徑
pro_path = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__))))
print(pro_path)
# 獲取app安裝包所在路徑
app_path = os.path.join(pro_path, "app", "com.jinding.shuqian_4.2.9_liqucn.com.apk")
print(app_path)
# 真機(jī)
desired_caps = {
"platformName": "Android",
"platformVersion": "7.0",
"deviceName": "Honor NOTE 8",
"udid": "4556R1653643456",
"appPackage": "com.jinding.shuqian",
"appActivity": "com.jinding.shuqian.WelcomeActivity",
"app": app_path
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
sleep(2)
print('檢測是否是第一次啟動(dòng)')
try:
# 定位我的
w = driver.find_element_by_id('com.jinding.shuqian:id/rb_center')
except Exception as e:
print('是第一次啟動(dòng)祷蝌,需要授權(quán)')
while True:
try:
# 定位授權(quán)按鈕
accredit = driver.find_element_by_id('com.android.packageinstaller:id/permission_allow_button')
except Exception:
break
else:
accredit.click() # 點(diǎn)擊授權(quán)
else:
w.click() # 點(diǎn)擊我的
# 獲取屏幕尺寸
def get_size():
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
return x,y
# 顯示屏幕尺寸(width,height)
l=get_size()
print(l)
# 向左滑動(dòng)
def swipeLeft():
l=get_size()
x1=int(l[0]*0.9)
y1=int(l[1]*0.5)
x2=int(l[0]*0.1)
driver.swipe(x1,y1,x2,y1,1000)
#向左滑動(dòng)2次
for i in range(2):
swipeLeft()
sleep(0.5)
# 點(diǎn)擊立即體驗(yàn)
driver.find_element_by_id('com.jinding.shuqian:id/imageView_guide_join').click()
sleep(1)
# 點(diǎn)擊我的
driver.find_element_by_id('com.jinding.shuqian:id/rb_center').click()
sleep(1)
# 輸入用戶名
driver.find_element_by_id('com.jinding.shuqian:id/et_login_username').send_keys('1234556789')
# 輸入密碼
driver.find_element_by_id('com.jinding.shuqian:id/et_login_password').send_keys('123456')
# 點(diǎn)擊登錄
driver.find_element_by_id('com.jinding.shuqian:id/button_login').click()
sleep(1)
# 續(xù)滑動(dòng)兩次設(shè)置九宮格密碼
for i in range(2):
# 設(shè)置坐標(biāo)
TouchAction(driver).press(x=385, y=1122).wait(2000) \
.move_to(x=385, y=1468).wait(1000) \
.move_to(x=385, y=1820).wait(1000) \
.move_to(x=720, y=1820).wait(1000) \
.move_to(x=1049, y=1820).wait(1000) \
.release().perform()
sleep(1)
# 點(diǎn)擊繼續(xù)
driver.find_element_by_id('com.jinding.shuqian:id/right_btn').click()