2017-05-23 46 views
0

所以我使用一般的「I press」*「button」Gherkin語句來按下按鈕。我的問題是整個應用程序中的文本不是標準化的。Ruby/Appium:如何通過文本屬性從find_elements數組中選擇元素

我想要做的是使用find_elements來形成一個所有按鈕元素的數組,從我的小黃瓜輸入中獲取文本(例如:'我按「是」按鈕'),利用.casecmp方法忽略從find_elements數組中查找我的按鈕文本的大小寫,並比較文本屬性和我的Gherkin輸入。

這裏是我的代碼嘗試:

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 

目前我收到以下錯誤:

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' 

我不能完全確定什麼這些錯誤在我的案件的意思,但我繼續我的研究。如果任何人都可以分享見解我做錯了,我將不勝感激。

也有任何有關如何在該陣列中存儲元素的文檔?我甚至可以將元素的文本屬性與變量或其他值進行比較?非常感謝您給我提供的任何幫助。

回答

1

您所採用的索引將具有web元素,而不是您所期望的Integer。請嘗試以下操作:

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 

如果您遇到進一步問題,請在評論中告訴我。

希望它有幫助!

+0

謝謝!對於我的情況,我不得不添加無案例的比較來解決我的套管問題,如下所示: button_array.each do | btn | btn.click if btn.text.casecmp(「#{button_text}」)== 0 end 否則這對於我所需要的非常完美,謝謝! –

+0

很高興這可以幫助,另一種選擇,如果你不打擾案件,如果你可以轉換成較低或大寫,並比較,這裏是你是如何做到這一點... btn.text.downcase == button_text.downcase 樂於幫助!! –

相關問題