Erkennen von Audio mit Selenium Webdriver und Python

8

Vielleicht nicht einfach, aber ich möchte in der Lage sein, eine Webseite in Selenium zu laden und zu testen, ob Flash oder HTML5 automatisch Audio abspielen.

Wenn ein Nutzer theoretisch meine Seiten besucht, kann er zwar das Video abspielen, aber keinen Ton (korrekte Art) Manchmal wird das Audio automatisch mit dem Video abgespielt, das möchte ich nicht.

Ich frage mich, ob es eine Möglichkeit gibt zu erkennen, ob JEDES Audio über Python und Firefox läuft? Meine internen Tests laden die Seite und machen einige Selen-Checks, um sicherzustellen, dass alles gut ist. Was ich tun möchte, ist einen Test hinzuzufügen, der auch Python oder Selen überprüft, wenn Audio abgespielt wird, und ihn markieren.

Irgendwelche Ideen?

    
Matt Essenburg 27.08.2014, 20:23
quelle

1 Antwort

6

Ich habe ähnliche Probleme. Ich beschäftige mich mit viel Audio über das Internet. Ich muss die Audits automatisieren, um Audio-Degradierung, Audio-Spiele usw. zu finden. Ich konnte nicht wirklich eine Bibliothek finden, die mir in Groovy oder Ruby hilft (ich habe Python nicht überprüft), also habe ich ein installiertes Programm aufgerufen (sox) und es würde in Echtzeit prüfen, ob Audio gehört wurde oder nicht.

Das war mein grooviges Call / Script:

%Vor%

Über Core Audio und "Soundflower"

Der Sox-Aufruf spezifiziert die Audioboard mit dem -t coreaudio (Unter Linux würde man wahrscheinlich als coreaudio auch alsa verwenden - coreauduio ist das OSX-Audio-Interface.) Die "Soundflower " Parameter ist der Kanal, den ich in Soundflower erstellt habe. Dies war mir wichtig, um Ton isoliert aufzunehmen (da ich Audioqualitätsprüfungen durchführte). Wenn Sie beispielsweise den Standardkanal verwenden, wie alsa default oder coreaudio default es wird dein Mikrofon aufnehmen ... wenn also der Typ neben dir niest ... es verderbt den Test.

Wenn Sie einen virtuellen Audiokanal verwenden (wie bei Soundflower unter OSX), können Sie alle Audiodaten so einstellen, dass sie "Soundflower" ausgehen und den sox-Befehl auf diesem Kanal ausführen ... und Sie werden es nur sein Anhören des Systemaudios, das den virtuellen Kanal verlässt.

Sie können stattdessen Ihren Standardkanal verwenden (aber er hört auf, wenn er andere Geräusche im Raum hört.)

Ich habe diesen Code async mit groovenden Aufgaben ausgeführt ... so dass der Code in etwas wie Folgendes eingepackt war:

%Vor%

Da es asynchron zuhörte, blockierte es den Rest des Tests nicht.

Der Sox-Befehl

Der eigentliche Sox-Echtzeitbefehl, den ich verwendet habe, kam vom Video dieses Typen (schau es dir an, während er verschiedene Parameter benutzt):

Ссылка

Erweitern Sie es

Ich habe es ein wenig weiter getrieben, indem ich die Aufnahme des über den Browser gespielten Audios automatisieren und dann mit dem PESQ-Algorithmus bestimmen konnte, wie genau das aufgenommene Audio mit dem Original-Audio abgespielt wurde. Wenn Sie daran interessiert sind, schauen Sie sich meinen Beitrag dazu an:

Ссылка

Python-PCAP-Scraping

Vielleicht nicht verwandt mit dem, was Sie tun, aber ich habe auch mit der Pyshark-Bibliothek experimentiert, um Audiomaterial aus Paketerfassungen zu rekonstruieren ... es ist komplexer und vielleicht fragiler. Aber wenn das von Interesse ist, hier ist meine Implementierung:

Ссылка

    
continuousqa 18.09.2014 16:55
quelle