Увольняющаяся клавиатура в тесте на Appium на iOS
Как вы отказываетесь от клавиатуры в тесте Appium на iOS? Я получаю эту запись в консоли после ввода текста
[INSTSERVER] Sending command to instruments: if (!au.mainApp().keyboard().isNil()) {
var key = au.mainApp().keyboard().buttons()['Done']
if (key.isNil()) {
var startY = au.mainApp().keyboard().rect().origin.y - 10;
var endY = au.mainWindow().rect().size.height - 10;
au.flickApp(0, startY, 0, endY);
} else {
key.tap();
}
au.delay(1000);
}
Я вижу, что это означает, что кнопка "Готово" на моей клавиатуре означает "возврат". Глядя на документацию, я смогу сделать это следующим образом: https://github.com/appium/ruby_lib/blob/ef20cdd09cdb3dac32b789144b17ed2daf745a8d/docs/ios_docs.md#hide_keyboard
Я пробовал это с помощью следующего кода:
When(/^I enter the text "(.*?)"$/) do |user_text|
textfield( "My Textbox" ).type user_text
hide_keyboard( "Return" )
end
Несмотря на это, он все еще зависает в поисках кнопки "Готово". Как вы переопределяете, какой ключ ищет Appium. Я загрузил Git-репозиторий со своим кодом здесь: GitHub Repository
Когда я использую "Готово" в качестве кнопки на клавиатуре, чтобы вернуться, она работает. Проблема в том, что мое приложение не использует "Готово".
1 ответ
В конце концов мне удалось решить эту проблему, прибегнув к исправлению кода отклонения клавиатуры в Appium, как это.
Возможности / поддержка /env.rb
module Appium
module Ios
def patch_webdriver_element
Selenium::WebDriver::Element.class_eval do
# Enable access to iOS accessibility label
# accessibility identifier is supported as 'name'
def label
self.attribute('label')
end
# Cross platform way of entering text into a textfield
def type text
$driver.execute_script %(au.getElement('#{self.ref}').setValue('#{text}');)
end
end
end
def hide_ios_keyboard close_key='Done'
dismiss_keyboard = (<<-JS).strip
if (!au.mainApp().keyboard().isNil()) {
var key = au.mainApp().keyboard().buttons()['#{close_key}']
if (key.isNil()) {
var startY = au.mainApp().keyboard().rect().origin.y - 10;
var endY = au.mainWindow().rect().size.height - 10;
au.flickApp(0, startY, 0, endY);
} else {
key.tap();
}
}
JS
ignore do
wait_true(5) do
execute_script '!au.mainApp().keyboard().isNil()'
end
# dismiss keyboard
execute_script dismiss_keyboard
end
wait_true(5) do
execute_script 'au.mainApp().keyboard().isNil()'
end
end
end
end
Затем в моих определениях шагов я могу вручную убрать клавиатуру после ввода текста, что позволяет мне указать, как на клавиатуре вызывается кнопка "Возврат".
def enter_postcode( postcode )
textfield( "postcode" ).type postcode
hide_ios_keyboard('Return')
end