2017-05-23 1 views
0

Donc j'utilise un général "I press" * "bouton" Gherkin pour appuyer sur les boutons. Mon problème est que le texte n'est pas standardisé dans toute l'application. Ce que je veux faire est d'utiliser find_elements pour former un tableau de tous les éléments de bouton, prenez le texte de mon entrée Gherkin (par exemple: 'J'appuie sur le bouton' Yes ​​'), utilisez la méthode .casecmp pour ignorer la capitalisation du texte de mon bouton à partir du tableau find_elements et comparez les attributs de texte et mon entrée Gherkin.Ruby/Appium: Comment sélectionner un élément du tableau find_elements via l'attribut de texte

Voilà ma tentative du 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 

Au moment où je reçois les erreurs suivantes:

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' 

Je ne suis pas tout à fait sûr de ce que ces erreurs signifient dans mon cas, mais je Je continue ma recherche. Si quelqu'un peut partager un aperçu de ce que je fais de façon incorrecte, je l'apprécierais grandement.

Y a-t-il également de la documentation sur la façon dont appium stocke des éléments dans ce tableau? Puis-je même comparer l'attribut de texte de l'élément à une variable ou à une autre valeur? Merci beaucoup pour toute aide que vous pouvez me donner.

Répondre

1

L'index que vous avez pris aura l'élément web au lieu d'un entier que vous attendez. Essayez ce qui suit:

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 

Faites-moi savoir dans les commentaires si vous rencontrez un autre problème.

Espérons que ça aide !!

+0

Merci! Pour mon cas, j'ai dû ajouter la comparaison sans cas pour résoudre mon problème de boîtier comme suit: button_array.each do | btn | btn.click si btn.text.casecmp ("# {button_text}") == 0 fin Sinon, c'est parfait pour ce dont j'ai besoin, merci beaucoup! –

+0

Heureux cela pourrait aider, une autre option si vous ne vous embêtez pas à propos de cas si vous pouvez convertir les deux en majuscules ou en minuscules et comparer, voici comment vous faites cela ... btn.text.downcase == button_text.downcase Heureux d'aider!! –