手機(jī)自動化測試用例雖然可以在模擬器上運行,可是模擬器畢竟和真機(jī)還是有區(qū)別的。在搞定了模擬器上運行測試用例后,我又花了兩天的時間,研究了一下真機(jī)運行測試用例。期間也遇到了不少問題,不過最終還是搞定了,現(xiàn)在先將測試用例真機(jī)運行的方法說一下,然后再羅列我遇到的問題。
真機(jī)運行測試用例的方法
一, 打開手機(jī)的USB調(diào)試模式
不同的手機(jī)有不同的方法打開usb調(diào)試模式,可是去網(wǎng)上查一下你手機(jī)的調(diào)試模式打開辦法(http://wenku.baidu.com/view/3077f06c25c52cc58bd6be15.html?re=view)。還有一個可以去網(wǎng)上下載一個“USB調(diào)試快捷開關(guān)”的應(yīng)用,將手機(jī)的USB調(diào)試模式打開。
二, 連接手機(jī)到電腦
將手機(jī)用數(shù)據(jù)線連接到電腦,并授權(quán)USB調(diào)試模式。查看連接的效果,在cmd下運行命令:adb devices -l 查看UDID,如下圖所示:

如果有輸出,就表示連接成功。
三, 啟動Appium服務(wù)
根據(jù)查到的UDID啟動appium服務(wù),運行命令:
#>appium -a 127.0.0.1 -p 4723 –U 4ca1558c --no-reset
-U 參數(shù)后面跟的一串字符就是手機(jī)的UDID,這個是通過第二步查到的。

當(dāng)程序輸出如上圖信息的時候,表示appium啟動成功,此時便可以運行測試腳本了。
四, 測試腳本的編寫及運行
真機(jī)運行的測試腳本與模擬器上幾乎是相同的,就是有些兒配置不太一樣。具體腳本詳解如下:
#-*- coding: UTF-8 -*-
import os
import time
import unittest
from selenium import webdriver
from lib2to3.pgen2.driver import Driver
from lib2to3.tests.support import driver
PATH=lambda p:os.path.abspath(
os.path.join(os.path.dirname(__file__),p)
)
global driver
class LoginAndroidTests(unittest.TestCase):
def setUp(self):
desired_caps={}
desired_caps['device'] = 'android'
desired_caps['platformName']='Android'
desired_caps['browserName']=''
desired_caps['version']='4.4.2'
desired_caps['deviceName']='MIUI-KXCCNBF22.0'#這是測試機(jī)的型號,可以查看手機(jī)的關(guān)于本機(jī)選項獲得
desired_caps['app'] = PATH('D:\\AndroidAutomation\\AndroidAutoTest\\app\\zhongchou.apk')#被測試的App在電腦上的位置
#如果知道被測試對象的apppage,appActivity可以加上下面這兩個參數(shù),如果不知道,可以注釋掉,不影響用例執(zhí)行
#desired_caps['appPackage']='com.subject.zhongchou'
#desired_caps['appActivity']='.ZhongChou'
self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
def tearDown(self):
self.driver.quit()
def test_login(self):
time.sleep(10)
#點擊“注冊登錄”按鈕 button=self.driver.find_element_by_id("com.subject.zhongchou:id/register_button")
button.click()
time.sleep(5)
#登錄
name = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_phone')
name.click()
name.send_keys('183XXXXXX05')
psd = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_password')
psd.click()
psd.send_keys('XXXXXXXX’)
blogin=self.driver.find_element_by_id('com.subject.zhongchou:id/go_numberlogin')
blogin.click()
time.sleep(10)
#此處加上檢測登錄是否成功的代碼
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(LoginAndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
另開一個cmd窗口,運行測試腳本(python XXXX.py)即可。此時服務(wù)端就會有輸出,程序在手機(jī)上運行。
注:在測試用例運行過程中,要在手機(jī)上安裝Appium Settings,按提示允許安裝就可以了。
研究真機(jī)運行的時候遇到的問題
1,電腦連接到手機(jī)后,運行adb devices –l無信息輸出?
電腦連接手機(jī)后,一般情況下會提示安裝驅(qū)動程序,如果手機(jī)較新的話可能不會提示,但是運行adb devices –l后無任何輸出。此時只需要安裝91手機(jī)助手或是其他手機(jī)管理工具,安裝上相應(yīng)的驅(qū)動程序,再次連接就可以了。
2,運行程序后提示:WebDriverException: Message: u"A new session could not be created. (Original error: Activity used to start app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity)"?
當(dāng)我從網(wǎng)上學(xué)習(xí)了腳本的編寫方法后,模擬著寫了一個我自己的測試用例,可是連接到真機(jī)后,運行腳本時,在執(zhí)行過程中出現(xiàn)了上面的錯誤提示,可是程序無法運行。
在網(wǎng)上查看了一下,找到了問題所在:是程序的'appPackage'和‘appActivity’不正確,查找了解決辦法,有說要反編譯被測試的app,然后查找里面的appactivity??墒欠淳幾g后才發(fā)現(xiàn),里面的東西好多,找不到開始的時候appactivity是哪兒個?只好再找其他的辦法了。
最后在一個論壇的回復(fù)中找到了解決辦法:將setup函數(shù)中的兩行代碼注釋掉就可以了。
desired_caps['appPackage']='com.subject.zhongchou'
desired_caps['appActivity']='.ZhongChou'
3,在程序執(zhí)行這程中,用Send_keys()函數(shù)對輸入框輸入值的時候,無法輸入?
當(dāng)我執(zhí)行測試用例的時候,發(fā)現(xiàn)用戶名和密碼無法用send_keys()函數(shù)輸入到輸入框中。因為一輸入就會打開軟鍵盤,而軟鍵盤上面的布局是九宮格的,點擊一直出錯。
在網(wǎng)上查了好多辦法,人家都是一用的這個函數(shù)啊,為什么到我這就不行了呢?我想到了先切換到數(shù)字或是英語輸入模式,然后再輸入,折騰起來很麻煩,還沒有成功。最后才發(fā)現(xiàn),是我自己好傻,安裝了搜狗輸入法的原因,把這個輸入法卸掉后就成功了!
|