在Appium自动化测试中实现输入语音

解决问题的思路

最近测试的项目中,被测产品有一个功能是类似微信的长按输入语音的功能。本来以为这个是没有办法做成自动化测试的,因为没有在appium的api文档中找到上传语音文件的方法。继续思考了一下是不是可以利用python其他的第三方库来实现呢,通过上网搜索后找到了方法。大的思路是利用appium在手机上对产品中的按钮进行长按操作,同时使用pygame的音频播放函数在电脑上播放录音。

代码片段

注意:下面不是完整的代码,大家只是作为参考,如果要实际使用的话,请将相关配置替换为自己的app信息,还有需要提前用电脑录好要使用的录音文件,我这次使用的是mp3格式的音频文件。

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秒钟是一样的。

转载于:https://my.oschina.net/u/3247573/blog/842725

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值