在Appium自動化測試中實現輸入語音

解決問題的思路

最近測試的項目中,被測產品有一個功能是相似微信的長按輸入語音的功能。原本覺得這個是沒有辦法作成自動化測試的,由於沒有在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

相關文章
相關標籤/搜索