2016-08-31 6 views
2

Я использую calabash-android для проверки своего приложения. В своем pre-defined steps у него есть куча шагов ожидания, но у него есть только «Тогда я жду появления представления с идентификатором».calabash-android: дождитесь появления строки с идентификатором

Мне нужно подождать, пока появится строка R.string.final_result.

Мне интересно, как я могу ждать появления строки с идентификатором? Мне нужно подождать идентификатор строкового ресурса, потому что строка может быть локализована в моем приложении.

Если это невозможно сделать с заранее определенными шагами, как я могу создать шаг для этого?

+0

вы попробовать 'Тогда я жду«final_result»в appear'? – Blackbelt

+0

@Blackbelt, Как я уже сказал в моем вопросе, строка, которую я жду, может быть локализована на другом языке, «Тогда я жду, когда« final_result »появится» ждет появления текста «final_result», мне нужно дождитесь появления символа строки, а не текста строки. –

+0

Я рекомендую вам попробовать эту библиотеку: https://github.com/mauriciotogneri/green-coffee Он основан на Espresso, поэтому тесты работают быстрее, чем с помощью Calabash. Кроме того, у вас не будет проблем с синхронизацией. –

ответ

0

Пример этапа. Вы можете заменить * тем классом, который вы используете для ярлыка.

Then(/^I wait for text with id "(.*?)" to appear$/) do |id| 
    wait_for_element_exists(“* id:’#{key}’”) 
end 

А затем просто использовать его на этапе определения:

Then I wait for text with id "final_result" to appear 

Кроме того, если вам не нравится идея идентификаторами, вы можете создать метод, который будет возвращать саму строку, основанную на язык и ключ, которые вы передаете ему, и вы можете справиться с локализацией таким образом. Например, грубый скелет с xml-строками файл

def get_string_from_strings_file(key, language) 
    file_path = "#{PATH_TO_STRINGS_DIR}/#{language}" 
    xml_string = File.open(file_path) 
    s = string_xml.xpath("//string[@name='#{key}']/text()") 
    raise 'No string found' if s == nil 
    s 
end 

И проверка текста на шаге.

+0

Спасибо, я попробую. Кстати, где я могу найти все доступные функции, такие как 'wait_for_element_exists (...)' для создания пользовательских шагов? –

+0

Я пробовал ваше решение, я получаю эту ошибку: 'undefined local variable или method' key 'для # (NameError) ' –

+0

Я изменил' key' на 'id', и он не работает. –

1

fin Вы можете дождаться элемента сначала с помощью метода wait_poll. и как только он появится, вы можете получить его текстовое значение. Поскольку эта строка будет как одно значение атрибута элемента. проверить код .feature файла

Then I should wait for the text Final Result 

и код позади в файле .rb,

Then(/^I should wait for the text Final Result$/) do 
#this wait_poll method will wait untill element with specified id exists. 
wait_poll(:until_exists => "* marked:'#{id}'", :timeout => 20)do 
#code, you can run while waiting 
end 
end