2017-05-23 1 views
0

So verwende ich eine allgemeine "Ich drücken" * "Taste" Gurke-Anweisung zum Drücken von Tasten. Mein Problem ist, dass der Text in der gesamten App nicht standardisiert ist.Ruby/Appium: So wählen Sie Element aus find_elements Array über Text-Attribut

Was ich tun möchte, ist find_elements, um ein Array aller Schaltflächenelemente zu bilden, nehmen Sie den Text aus meiner Gherkin Eingabe (zum Beispiel: "Ich drücke die" Ja "Taste), verwenden Sie die .casecmp Methode zu ignorieren die Groß-/Kleinschreibung meines Schaltflächentextes aus dem find_elements-Array und vergleiche die Textattribute und meine Gherkin-Eingabe.

Hier ist mein Versuch, den Code:

Then (/^I press the "([^"]*)" button$/) do |button_text| 
#assign gherkin input to variable 
@button_text = button_text 
#create find_elements array for all Buttons 
button_array = find_elements(xpath: "//android.widget.Button") 
#create for loop that will compare each element's text with @button_text 
    button_array.each do |index| 
    #Attempting to reference text attribute of array at index and compare @button_text with case insensitive comparison 

    matching_button = button_array[index].text.casecmp("#{@button_text}") 
    if matching_button = 0 #this means it's a match 
     button_array[index].click() 
    else 
    end 
    end 
end 

Im Moment habe ich die folgenden Fehler erhalten:

And I press the "YES" button     # features/step_definitions_android/common_steps.rb:107 
     no implicit conversion of Selenium::WebDriver::Element into Integer (TypeError) 
     ./features/step_definitions_android/common_steps.rb:113:in `[]' 
     ./features/step_definitions_android/common_steps.rb:113:in `block (2 levels) in <top (required)>' 
     ./features/step_definitions_android/common_steps.rb:111:in `each' 
     ./features/step_definitions_android/common_steps.rb:111:in `/^I press the "([^"]*)" button$/' 
     features/FAB.feature:18:in `And I press the "YES" button' 

ich nicht ganz sicher bin, was diese Fehler in meinem Fall bedeuten, aber ich m meine Forschung fortsetzen. Wenn jemand Einblick in das, was ich falsch mache, teilen könnte, würde ich es sehr schätzen.

Gibt es auch eine Dokumentation darüber, wie Appium Elemente in diesem Array speichert? Kann ich das Textattribut des Elements auch mit einer Variablen oder einem anderen Wert vergleichen? Vielen Dank für jede Hilfe, die Sie mir geben können.

Antwort

1

Der Index, den Sie genommen haben, wird das Web-Element anstelle einer Ganzzahl haben, die Sie erwarten. Versuchen Sie Folgendes:

Then (/^I press the "([^"]*)" button$/) do |button_text| 
    button_array = find_elements(xpath: "//android.widget.Button") 
    button_array.each do |btn| 
    btn.click if btn.text == button_text 
    end 
end 

Lassen Sie mich in den Kommentaren wissen, wenn Sie weitere Ausgabe begegnen.

Hoffe es hilft !!

+0

Danke! Für meinen Fall musste ich den falllosen Vergleich hinzufügen, um mein Gehäuseproblem wie folgt zu adressieren: button_array.each do | btn | btn.click wenn btn.text.casecmp ("# {button_text}") == 0 Ende Sonst ist dies perfekt für das, was ich brauche, danke eine Tonne! –

+0

Gut, dass dies helfen könnte, eine weitere Option, wenn Sie sich nicht um den Fall kümmern, wenn Sie beide in Klein- oder Großbuchstaben konvertieren und vergleichen können, hier ist, wie Sie das tun ... btn.text.downcase == button_text.downcase Freue mich zu helfen!! –

Verwandte Themen