2014-08-27 79 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/