Hintergrund: Ich verwende eine DSL für automatisierte UI-Tests in Ruby namens Watir-Webdriver.Wie übergibt man Methodenparameter in Ruby, die als Name existierender Methoden verwendet werden können?
Ich möchte eine sehr wiederverwendbare Methode schreiben, die besteht oder fehlschlägt, wenn ein bestimmtes HTML-Element vorhanden ist. Hier ist, was ich bisher:
require 'watir-webdriver'
require 'rspec'
b = Watir::Browser.new
def display_check(element_type,unique_element,expectation)
if expectation == "yes"
b.send(element_type).((:id or :class or :name or :value),/#{Regexp.escape(unique_element)}/).exists?.should == true
else
b.send(element_type).((:id or :class or :name or :value),/#{Regexp.escape(unique_element)}/).exists?.should == false
end
end
Ich kann verstehen, dass „div“ in diesem Beispiel eine Zeichenfolge als eine Methode Argument übergeben ist. Aber im Kontext der DSL ist "div" (minus die Anführungszeichen) auch eine Watir-Webdriver-Methode. Also ich denke, ich muss irgendwie die Zeichenfolge in eine geeignete watir-webdriver-Methode konvertieren
Ich möchte im Grunde Folgendes tun, um festzustellen, ob ein Element existiert.
display_check("div","captcha","no")
Da ich für select_lists suchen würde, divs, Radio-Buttons etc., wäre es sehr nützlich sein, den Elementtyp als Option angeben, anstatt es hart auf das Verfahren codiert zu haben.
Das hat funktioniert. Ich vermute, ich habe missverstanden, wie die Sendemethode funktioniert. Vielen Dank! – mmla