2014-08-27 20 views
8

Forse non è facile, ma voglio poter caricare una pagina Web in Selenium e verificare se flash o html5 riproducono automaticamente l'audio.Rileva audio con Selenium Webdriver e Python

In teoria, quando un utente visita i miei siti, può vedere la riproduzione del video ma non l'audio (modo corretto) A volte l'audio viene riprodotto automaticamente con il video, questo è ciò che non desidero.

Mi chiedo se c'è un modo per rilevare se QUALSIASI audio viene riprodotto tramite python e firefox? I miei test interni caricheranno la pagina e faranno un bel po 'di controlli sul selenio per assicurarsi che tutto sia buono. Quello che mi piace fare è aggiungere un test che controlli anche con python o selenio se l'audio è in riproduzione e contrassegnalo.

Qualche idea?

+2

temo che questo non è qualcosa che un WebDriver in grado di gestire. – alecxe

+0

Ho pensato così tanto. Potrebbe dover appoggiarsi a Python o qualcos'altro. –

+0

Non so come si farebbe a meno di interrogare il sistema audio del sistema operativo per segnalare se il browser lanciato da Selenium sta inviando audio. – Louis

risposta

6

Ho problemi simili. Mi occupo di molto audio sul web. Devo automatizzare i controlli per il degrado dell'audio, le riproduzioni audio, ecc. Non riuscivo a trovare una libreria che mi aiutasse in Groovy o Ruby (non ho controllato Python), quindi ho fatto una chiamata a un programma installato (sox) e controllerebbe in tempo reale se l'audio fosse ascoltato o meno.

Questa era la mia groove chiamata/script:

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 
      } 

Chi Core Audio e "Soundflower"

La chiamata sox specifica la scheda audio con il CoreAudio -t (su Linux si probabilmente userò alsa invece di 'coreaudio' - coreauduio è l'interfaccia audio OSX.) Il parametro "Soundflower" è il canale che ho creato in Soundflower. Per me è stato importante registrare il suono in isolamento (mentre eseguivo controlli di qualità audio). Ad esempio, se hai utilizzato il canale predefinito, ad esempio alsa predefinito o coreaudio predefinito, raccoglierà il microfono ... quindi se il tizio accanto a te starnutisce ... corrompe il test.

Utilizzando un canale audio virtuale (come con Soundflower su OSX), è possibile impostare tutto l'audio "out" per uscire da "Soundflower", quindi eseguire il comando sox su quel canale ... e solo stai ascoltando il sistema audio che esce dal canale virtuale.

È possibile invece utilizzare il canale di default (ma finirà quando sente altri rumori nella stanza.)

mi sono imbattuto che il codice asincrono utilizzando compiti groove ... in modo che il codice è stato avvolto in qualcosa di simile:

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

Dal momento che stava ascoltando in modo asincrono, non avrebbe bloccato il resto del test.

Il comando Sox

Il comando effettivo sox tempo reale che ho usato, è venuto dal video di questo ragazzo (il check-out, come egli utilizza alcuni parametri differenti):

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

Estensione It

L'ho spinto un po 'oltre, essendo in grado di automatizzare la registrazione dell'audio riprodotto attraverso il browser e quindi utilizzare l'algoritmo PESQ per determinare quanto l'audio registrato fosse l'audio originale riprodotto. Se siete interessati a questo, sentitevi liberi di controllare il mio post su esso:

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

Python PCAP Raschiare

Forse estranei a quello che stai facendo, ma ho anche giocato con l'uso della libreria Pyshark per ricostruire l'audio dalle acquisizioni di pacchetti ... è più complesso e forse più fragile. Ma se è di interesse, ecco la mia realizzazione:

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

Problemi correlati