最近測試的項目中,被測產品有一個功能是相似微信的長按輸入語音的功能。原本覺得這個是沒有辦法作成自動化測試的,由於沒有在appium的api文檔中找到上傳語音文件的方法。繼續思考了一下是否是能夠利用python其餘的第三方庫來實現呢,經過上網搜索後找到了方法。大的思路是利用appium在手機上對產品中的按鈕進行長按操做,同時使用pygame的音頻播放函數在電腦上播放錄音。python
注意:下面不是完整的代碼,你們只是做爲參考,若是要實際使用的話,請將相關配置替換爲本身的app信息,還有須要提早用電腦錄好要使用的錄音文件,我此次使用的是mp3格式的音頻文件。web
from appium import webdriver from nose.tools import * from pygame import mixer #導入pygame方法用來後臺播放音頻文件 import unittest class MyTestCase(unittest.TestCase): @classmethod def setUpClass(self): desired_caps = {} desired_caps['platformName'] = 'Android' #設置操做平臺 --略-- global driver driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) @classmethod def tearDownClass(self): driver.quit() #退出當前應用 def test_11_voice_weather_beijing(self): driver.find_element_by_id('com.my.app.test:id/btn_set_mode_voice').click() #點擊切換到語音模式 el = driver.find_element_by_id('com.my.app.test:id/btn_press_to_speak') #選中「按住說話」按鈕 elx = el.location.get('x') #獲取按鈕的x座標 ely = el.location.get('y') #獲取按鈕的y座標 mixer.init() mixer.music.load('testmp3.mp3') #加載要播放的錄音文件 mixer.music.play() #後臺播放錄音 driver.swipe(elx,ely,elx,ely,10000) #長按按鈕10秒,開始接收語音,語音內容是「北京天氣」 weather_text = driver.find_element_by_id('com.my.app.test:id/weather_region').text assert_equal(weather_text, "北京") #檢查天氣顯示的區域是否正確
上面的代碼中,首先是導入pygame和appium和unittest等包,而後是作appium的啓動設置。接下來找到「按住說話」按鈕,而後是獲取這個按鈕在手機上的像素位置,這裏的x和y組合在一塊兒的像素點是在按鈕的左上角的像素點。而後使用pygame.mixer的方法來在電腦上後臺播放mp3錄音文件。接下來是使用appium的swipe方法,我我的理解是若是在一個特別小的範圍內滑動必定時間的話,效果是和長按同樣的。代碼最後一行就是在按鈕的左上角一個像素點上滑動10秒鐘,這樣和長按這個按鈕10秒鐘是同樣的。api