在上一篇博文中,講到這一篇會介紹Genymotion的安裝方式。大家都知道,Genymotion是一個模拟器,擷取會質疑了,直接連接配接真機就好了,為何還要配置模拟器?我也是用真機實踐後,才選擇安裝的模拟器。原因是:sdk自帶的uiautomatorviewer工具,不支援android8.0及以上的版本。社會在進步,移動裝置更是高速發展,現在使用的手機很多都已高于這個版本。網絡上有相對的解決辦法,解決辦法在文末給出,但我還是覺得麻煩,是以自己還是選擇安裝模拟器。
Genymotion配置
在下載下傳genymotion時,需要有官網賬号,才可以下載下傳,是以可以先注冊個賬号,自行注冊。
Genymotion下載下傳
Genymotion安裝
安裝過程那就更簡單了,打開下載下傳的安裝檔案,一路next,直至安裝成功,自動會安裝Oracle VM VirtualBox,該軟體是一款虛拟機,支援的平台很廣泛。在genymotion中,可以使用該軟體配置網絡、系統等。
Genymotion添加手機系統
輕按兩下已安裝好的genymotion,進入到啟動頁,如下:
配置SDK
SDK是上一篇博文介紹配置的,還沒安裝好的,可參見上一篇博文,配置如下:
SDK的位址,就是SDK的實際安裝位址,建議不要包含中文路徑。
配置好了SDK後,就可以下載下傳各種型号的手機系統了,如下所示,新版的genymotion頁面,比老版本好看多了
安裝手機系統并啟用
如何安裝手機系統?選擇自己需要的手機型号,點選右側按鈕處,點選install即可,如下:
靜候,等待下載下傳完,下載下傳速度,看大家的網速了,大小也就一兩百兆左右。
下載下傳完成之後,如何使用?點選右側的start按鈕即可,如下:
start相當于就是我們日常使用手機的時候,開機操作,系統啟動成功之後,出現如下界面:
說明genymotion模拟器就安裝好了,簡單幾步操作,安裝還是很簡單的。
檢視連接配接裝置
在檢視裝置之前,需要啟用開發者模式,相當于,我們真機在傳輸資料時,也是需要開啟開發者模式,并通過usb資料線連接配接電腦,完成資料的傳輸,是一個道理。
模拟器如何開啟開發者模式?一看圖就明白,如下圖所示:
進入到關于手機頁面,連續點選版本号七次,即可開啟開發者模式,記住,一定是七次,不能少。
開啟了開發者模式之後,USB調試也需要開啟,跟真機操作一樣的,如下圖:
手機已經處于開發者模式,并允許調試了,那如何檢視裝置連接配接是否正常了?這就需要引用adb指令了,adb指令在安裝sdk的時候,就會自動安裝。今天不深入分享adb指令的使用,隻做簡單介紹。檢視裝置連接配接的指令是:
adb devices
輸入該指令後,出現如下圖所示,則說明有裝置連接配接的
到這,genymotion模拟器就配置成功了,是不是非常的簡單。
腳本制作
app安裝
針對自家産品開發腳本,那自然是需要在模拟器中安裝一個自家的app的,那如何安裝呢,小小一個指令即可完成,指令如下:
adb install C:\Users\leo\Desktop\k.apk
adb依然是之前所提到的adb指令;install顧名思義,安裝的意思;後面的路徑則是apk包存放的位置。執行上述指令後,出現如下圖所示,則說明app安裝成功:
app解除安裝
剛描述了app的安裝,那解除安裝又是如何操作呢?有些朋友可能會想到指令adb uninstall C:\Users\leo\Desktop\k.apk麼?指令是這個,但卻不是接路徑了,需要對應app的包名。
包名如何擷取,在模拟器中打開你将要解除安裝的app,輸入指令:
adb shell dumpsys window w |findstr \/ |findstr name=
即可獲得對應app的包名了,解除安裝app的指令則是:
adb uninstall com.XXX.XXX
執行該指令後,模拟器中對應的app則會被解除安裝。
元素定位
元素定位,跟UI自動化的定位差不多,也無非就是id、name、xpath那些,主要是看自己如何使用,能夠簡單卻又準确無誤的定位到元素。
元素定位,我們借助sdk中自帶的工具:uiautomatorviewer.bat,工具路徑在:D:\android-sdk-windows\tools檔案夾下,具體路徑看個人安裝sdk的路徑,我隻是個舉例。
先在模拟器中打開對應的app,再打開uiautomatorviewer.bat工具,在工具中則會看到app對應的界面,如下所示:
從上圖可看出,左側面闆就是app對應的界面,右側則是元素的層級顯示,滑鼠點選對應的元素,右側就會展示對應的詳情路徑,便可實作元素的定位。該工具類似于火狐浏覽器中的firebug工具一樣,是便于進行元素提取,進行元素定位的。
代碼示例
寫到這,我已按耐不住的想上一段自己曾幾何時的一段線性代碼,很普通的一段線性代碼。實作一個簡單的登入操作,如下:
沒有斷言,沒有特殊邏輯,不喜勿噴,基于python剛入門寫的。做為新入門的朋友來說,可以參考一下,如果沒有參考價值,那忽略即可。
importseleniumimporttimefrom appium importwebdriver
desired_caps={'platformName': 'Android','platformVersion': '4.4.4','deviceName': 'S5','appPackage': '', #包名
'appActivity': '', #app入口
'udid': '192.168.66.101:5555', #genymotion裝置
'noReset': 'true','unicodeKeyboard': 'True','resetKeyboard': 'True',
}print('selenium version =', selenium.__version__)
driver= webdriver.Remote('http://192.168.1.103:4723/wd/hub', desired_caps)print("服務啟動成功")
time.sleep(3)
account= driver.find_element_by_id('id/rel_content')
account.find_element_by_id('id/edit_acount')
driver.press_keycode(61)print("換行操作")if driver.find_element_by_id('id/img_clear_acount'):
clr_account= driver.find_element_by_id('id/img_clear_acount').click()print("賬号清除成功")
account.send_keys('10086')print("賬号輸入完畢")
time.sleep(2)
driver.press_keycode(61)print("換行操作")
password= driver.find_element_by_id('id/rel_content')
password.find_element_by_id('id/edit_pass')
password.send_keys('123456')print("密碼輸入完畢")
driver.find_element_by_xpath('//android.widget.TextView[@text="登 錄"]').click()print("點選登入按鈕")print('登入成功')
time.sleep(5)
driver.quit()
代碼寫到這,想要運作,還需要基于appium的配合,才能夠運作起來。上述代碼及appium的操作,下篇博文将繼續分享。
問題總結
在博文一開始時,就講到遇到的一個問題,現在來說下解決方式。
在使用真機連接配接,進行元素定位時,出現如下報錯:unexpected error while obtaining UI hierarchy
詢問度娘發現,該問題原因是:android 8.0導緻的問題,需要更新 uiautomatorviewer 源碼才能解決。個人還不會更新源碼,是以繼續度娘,發現了一個解決辦法,如下:
1.在D盤根目錄下建立app.png文本檔案
2.在E盤根目錄下建立app.uix文本檔案
3.執行以下adb命名:
adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix E:/app.uix
adb shell screencap -p /sdcard/app.png
adb pull /sdcard/app.png D:/app.png
4.運作uiautomatorviewer.bat,導入檔案
5.再次連接配接手機問題得到了解決
執行adb指令如下所示:
運作uiautomatorviewer.bat,導入檔案,如下所示:
使用如上步驟,即可實作元素定位了,之前我說過,我不太喜歡用這種方式,是因為,每切換一個頁面,則需要重複上述步驟,覺得麻煩,是以就借助模拟器來進行元素定位了,這隻是我個人喜好罷了。指令一行一行的執行,很繁瑣,不過可以寫個bat檔案腳本,一鍵執行即可。
希望對有需要的朋友有所幫助,文中有描述不對的地方,歡迎批評指正。
本文僅代表作者觀點,系作者@溫一壺清酒發表。
歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
文章出處:http://www.cnblogs.com/hong-fithing/