2014-08-27 312 views
8

也许不容易,但我希望能够在Selenium中加载网页并测试flash或html5是否自动播放音频。使用Selenium Webdriver和Python检测音频

理论上,当用户访问我的网站时,他们可以看到视频播放,但没有音频(正确的方式) 有时音频会随视频自动播放,这就是我不想要的。

我想知道是否有方法检测是否有任何音频通过python和firefox播放?我的内部测试将加载页面并执行相当多的硒检查,以确保一切都很好。我喜欢做什么是添加一个测试,如果音频正在播放并标记它,还可以用python或selenium进行检查。

任何想法?

+2

恐怕这不是一个能的webdriver处理。 – alecxe 2014-08-27 20:28:15

+0

我想过这么多。可能不得不依靠python或其他东西。 – 2014-08-27 20:35:27

+0

我不知道你会怎么做这么短的查询操作系统的音频系统报告Selenium发起的浏览器是否发送任何音频。 – Louis 2014-08-27 21:43:56

回答

6

我有类似的问题。我通过网络处理很多音频。我必须自动检查音频降级,音频播放等。我无法真正找到一个库来帮助我在Groovy或Ruby(我没有检查Python),所以我打电话给已安装的程序(sox)并且它会检查是否听到音频的实时。

这是我的电话的Groovy /脚本:

def audioCheck = "sox -t coreaudio Soundflower /Users/me/project/record.wav silence 1 0.1 1% 1 .1 1%".execute() 
      audioCheck.waitFor() 
      println "EXIT VALUE FOR SOX IS: ${audioCheck.exitValue()}" 

      if(audioCheck.exitValue() == 0){ 
       // some stuff would happen now, if exit code is 0 
      } 

关于核心音频和 “Soundflower”

红袜调用指定音频板与-t CoreAudio的(在Linux上你可能会使用alsa而不是'coreaudio' - coreauduio是OSX音频接口。)“Soundflower”参数是我在Soundflower中创建的通道。例如,如果您使用默认频道,例如alsa默认coreaudio默认,它会选择您的麦克风...所以如果你身边的那个人打了打喷嚏......它会破坏测试。

通过使用虚拟音频通道(例如OSX上的Soundflower),您可以将所有音频设置为“out”,然后在该通道上运行sox命令......并且您将只会正在收听来自虚拟频道的系统音频。

您可以改为使用默认频道(但是当听到在房间里其他的声音也就会结束了。)

我跑了异步代码使用Groovy的任务......,这样的代码被包裹在这样的:

def listener = task { ... my script above ... } 

由于它是异步侦听的,它不会阻塞测试的其余部分。

红袜命令

我实际使用的SOX实时指挥,从这家伙的视频一(检查出来,因为他使用了一些不同的参数):

https://www.youtube.com/watch?v=Q5ntlKE0ze4

扩展它

我把它推进了一点,能够自动录制播放的音频浏览器,然后使用PESQ算法来确定录制的音频与正在播放的原始音频的接近程度。如果你感兴趣的是,随时检查出我的帖子就可以了:

http://sdet.us/webrtc-audio-quality-automation-with-pesq/

Python的PCAP刮

也许无关,你在做什么,但我也玩弄了使用Pyshark库重建音频数据包捕获...它更复杂,也许更脆弱。但是,如果感兴趣,这是我实现:

http://sdet.us/python-pcap-parsing-audio-from-sip-call/