Appium-實(shí)現(xiàn)手勢密碼登陸

前言:

前幾天有人問我,手勢登陸如何做?于是我找了一個(gè)APP試了試,所以本文來總結(jié)使用Python+Appium來實(shí)現(xiàn)手勢密碼登陸APP器一。


環(huán)境:

MacOS:10.13.4
Appium-desktop:1.6.1
Xcode:9.3.1
APP:眾安保險(xiǎn)-iOS版


一、Appium API -- TouchAction

Appium的輔助類厨内,主要針對手勢操作祈秕,比如滑動(dòng)、長按雏胃、拖動(dòng)等请毛。

1、按壓控件
方法:press()
開始按壓一個(gè)元素或坐標(biāo)點(diǎn)(x,y)丑掺。通過手指按壓手機(jī)屏幕的某個(gè)位置获印。
舉例:

TouchAction(driver).press(x=0,y=308).release().perform()

release() 結(jié)束的行動(dòng)取消屏幕上的指針。
Perform() 執(zhí)行的操作發(fā)送到服務(wù)器的命令操作街州。

2兼丰、長按控件
方法:longPress()
開始按壓一個(gè)元素或坐標(biāo)點(diǎn)(x,y)。 相比press()方法唆缴,longPress()多了一個(gè)入?yún)Ⅶ⒄鳎热婚L按,得有按的時(shí)間吧面徽。duration以毫秒為單位艳丛。1000表示按一秒鐘。其用法與press()方法相同趟紊。
舉例:

TouchAction(driver).longPress(x=1 ,y=302,duration=1000).perform().release();

3氮双、移動(dòng)
方法:moveTo()
將指針(光標(biāo))從過去指向指定的元素或點(diǎn)。
舉例:

TouchAction(driver).moveTo(x=0,y=308).perform().release();

4霎匈、暫停
方法:wait()
暫停腳本的執(zhí)行戴差,單位為毫秒。
舉例:

TouchAction(driver).wait(1000);

二铛嘱、通過觸摸多點(diǎn)坐標(biāo)進(jìn)行解鎖

根據(jù)上面API解釋暖释,我們可以得出按壓和移動(dòng)來實(shí)現(xiàn)手勢解釋袭厂,大概思路如下:

TouchAction.press(beginX,beginY).moveTo(xStep,yStep).moveTo(xStep,yStep).release().perform();

打開Appium-Inspector來查看手勢對應(yīng)的各個(gè)點(diǎn)的坐標(biāo)。

選擇[Swipe By Coordinates]球匕,可查看任意點(diǎn)的坐標(biāo)纹磺。可選擇手勢觸摸點(diǎn)的中心位置亮曹。如下圖所示:作者分別選擇左上角的4個(gè)點(diǎn)橄杨,即可模擬手勢來執(zhí)行登陸操作。
Appium-Inspector.png

代碼如下:
# -*- coding: utf-8 -*-
# @Time    : 2018/5/22 下午10:33
# @Author  : WangJuan
# @File    : appium-ios.py
from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction

cap = {
  "platformName": "iOS",
  "platformVersion": "11.4",
  "bundleId": "com.zhongan.insurance",
  "automationName": "XCUITest",
  "udid": "3e8325a7c0d*******************a7e",
  "deviceName": "****Iphone"
}

host = "http://0.0.0.0:4728/wd/hub"
driver = webdriver.Remote(host, cap)
sleep(3)
action = TouchAction(driver)
action.press(x=98, y=321).wait(100).move_to(x=208, y=321).wait(100).move_to(x=206, y=432).wait(100).move_to(x=98, y=432).perform().release()

三乾忱、兼容不同分辨率

直接用坐標(biāo)點(diǎn)找會(huì)有一些問題讥珍,比如手機(jī)屏幕大小不同历极,找點(diǎn)的位置可能會(huì)有偏差窄瘟,如何解決呢?
由下圖可見趟卸,先獲取第一個(gè)觸摸點(diǎn)的坐標(biāo)location及size蹄葱。分別定義為start_height、start_width锄列、start_x图云、start_y(其中start_x、start_y為觸摸點(diǎn)左上角的坐標(biāo))邻邮;
即可計(jì)算出第一個(gè)觸摸點(diǎn)的中心點(diǎn)坐標(biāo)分別為:
start_x + start_width/2, start_y + start_height/2
然后在計(jì)算出第二個(gè)觸摸點(diǎn)的中心點(diǎn)大致坐標(biāo)為:
start_x+start_width*2, y=start_y+start_height*2

Appium-Inspector-2.png

其他坐標(biāo)均可按照此計(jì)算方式竣况,詳情見具體例子。

# -*- coding: utf-8 -*-
# @Time    : 2018/5/22 下午10:33
# @Author  : WangJuan
# @File    : appium-ios.py
from time import sleep

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction

cap = {
  "platformName": "iOS",
  "platformVersion": "11.4",
  "bundleId": "com.zhongan.insurance",
  "automationName": "XCUITest",
  "udid": "3e8325a7c0***************62bd4a7e",
  "deviceName": "My@Iphone"
}

host = "http://0.0.0.0:4728/wd/hub"
driver = webdriver.Remote(host, cap)
sleep(3)
action = TouchAction(driver)
# action.press(x=98, y=321).wait(100).move_to(x=208, y=321).wait(100).move_to(x=206, y=432).wait(100).move_to(x=98, y=432).perform().release()
start = driver.find_element_by_xpath('//XCUIElementTypeApplication[@name="眾安保險(xiǎn)"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther\
                    /XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]')
start_height = start.size['height']
start_width = start.size['width']
start_x = start.location['x']
start_y = start.location['y']
begin_x = start_x + start_width/2
begin_y = start_y + start_height/2

action.press(x=start_x, y=start_y).wait(100).move_to(x=start_x+start_width*2, y=begin_y).wait(100).move_to\
                  (x=start_x+start_width*2, y=start_y+start_height*2).wait(100).move_to(x=begin_x,y=start_y+start_height*2).perform().release()

以上筒严,對你有幫助的話丹泉,請點(diǎn)贊吧??~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鸭蛙,隨后出現(xiàn)的幾起案子摹恨,更是在濱河造成了極大的恐慌,老刑警劉巖娶视,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晒哄,死亡現(xiàn)場離奇詭異,居然都是意外死亡肪获,警方通過查閱死者的電腦和手機(jī)寝凌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孝赫,“玉大人较木,你說我怎么就攤上這事『” “怎么了劫映?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵违孝,是天一觀的道長。 經(jīng)常有香客問我泳赋,道長雌桑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任祖今,我火速辦了婚禮校坑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘千诬。我一直安慰自己耍目,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布徐绑。 她就那樣靜靜地躺著邪驮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪傲茄。 梳的紋絲不亂的頭發(fā)上毅访,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音盘榨,去河邊找鬼喻粹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛草巡,可吹牛的內(nèi)容都是我干的守呜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼山憨,長吁一口氣:“原來是場噩夢啊……” “哼查乒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萍歉,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侣颂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后枪孩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憔晒,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年蔑舞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拒担。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡攻询,死狀恐怖从撼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钧栖,我是刑警寧澤低零,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布婆翔,位于F島的核電站,受9級特大地震影響掏婶,放射性物質(zhì)發(fā)生泄漏啃奴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一雄妥、第九天 我趴在偏房一處隱蔽的房頂上張望最蕾。 院中可真熱鬧,春花似錦老厌、人聲如沸瘟则。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醋拧。三九已至,卻和暖如春宿百,著一層夾襖步出監(jiān)牢的瞬間趁仙,已是汗流浹背洪添。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工垦页, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人干奢。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓痊焊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忿峻。 傳聞我的和親對象是個(gè)殘疾皇子薄啥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容