2016-06-13 8 views
2

Ich werde versuchen, mein Problem zu vereinfachen. Ich schreibe ein Testprogramm mit py.test und appium. Jetzt:Python Wie vermeidet man viele if-Anweisungen

In der Anwendung habe ich 4 Medienformate: Video, Audio, Bild und Dokument. Ich habe eine Steuerschnittstelle mit vorherigen, nächsten, Play, Stop-Tasten. Jede Medienformate hat eine eindeutige ID wie

video_playbutton, audio_playbutton, document_playbutton, image_playbutton, video_stopbutton audio_stopbutton ... etc etc.

Aber die Operation ich tun muss, ist das gleiche für alle von ihnen zB Presse auf playbutton.

kann ich playbutton jede Adresse, wenn ich sie wie diese

find_element_by_id("video_playbutton") 

ausdrücklich geben Und wenn ich möchte auf andere playbuttons ich über die Linie jedes Mal zu wiederholen, habe drücken. Wie folgt aus:

find_element_by_id("video_playbutton") 
find_element_by_id("audio_playbutton") 
find_element_by_id("image_playbutton") 
find_element_by_id("document_playbutton") 

Und weil ich diese Funktion von einem anderen Skript aufrufen würde ich unterscheiden erste welche Saite, die ich beispiel bekam:

def play(mediatype): 
    if mediatype == "video" 
      el = find_element_by_id("video_playbutton") 
      el.click() 
    if mediatype == "audio" 
      el = find_element_by_id("audio_playbutton") 
      el.click() 
    if ..... 

Was ist der beste Weg, um diese Situation zu lösen? Ich möchte Hunderte von if-Anweisungen vermeiden, da es auch Stop-, Next-, vorherige usw. Buttons gibt.

Ich suche eher nach so etwas wie dieses

def play(mediatype) 
    find_element_by_id(mediatype.playbutton) 
+1

Haben Sie etwas wie 'el = find_element_by_id (mediatype +" _ playbutton "); ...; el.click() '? In "..." würden Sie natürlich überprüfen wollen, ob Sie tatsächlich etwas gefunden haben. –

+0

Entschuldigung sollte das erwähnen. Das Problem ist, dass die IDs nicht sehr genau sind. Ich werde ein echtes Beispiel geben: Video playbutton wird "imgPlayPause" genannt, während playback button heißt "imgPlayPause_mif" aber dann play playbutton heißt "docPlay_mif" –

+0

OK, aber wenn Sie diese Dinge im Voraus wissen, könnten Sie noch ein dict() auffüllen an einer Stelle, z. B. 'ids = dict(); ids ['video'] = 'video_playbutton'; ids ['audio'] = 'audio_playbutton'; ...; 'und dann später' el = find_element_by_id [ids [mediatype]]; ...; el.click() '. Dann ist der Lookup-Code einfach und der einzige langweilige Teil ist das Generieren dieses Mappings. Dieses Mapping muss irgendwo existieren, und es ist wahrscheinlich viel flexibler, es als Mapping zu halten als als eine Menge von if/elif/else-Statements. –

Antwort

1

Sie können die Selektoren und Operationen in zwei Wörterbücher trennen, welche Skalen besser. Sonst wird das Mapping schließlich sehr groß. Hier ist das Beispiel.

dictMedia = {'video':['video_playbutton', 'video_stopbutton','video_nextbutton'], 'audio':['audio_playbutton', 'audio_stopbutton', 'audio_nextbutton']} 
dictOperations = {'play':0, 'stop':1, 'next':2} 
def get_selector(mediatype, operation): 
    return dictMedia[mediatype][dictOperations[operation]] 

print get_selector('video', 'play') 

PS: Der obige Vorgang für Schlüssel überprüft nicht, nicht gefunden Fehler. Ich fühle jedoch immer noch, wenn die medienspezifischen Operationen wachsen, dann wäre ein Seitenobjektmodell besser.

+0

Dank Joshua Taylor und Vinayak Kolagi konnte ich das Problem lösen. Ich habe bereits etwas Ähnliches wie oben beschrieben gemacht, außer dass ich nicht an das zweite Diktat gedacht habe. Jetzt habe ich es laufen und funktioniert wie ein Zauber: D –

Verwandte Themen