как использовать результат запроса (*) для идентификации текстового поля и кнопки, а также использовать performAction и touch для ввода текста и нажатия кнопки

#calabash

#calabash

Вопрос:

Я просмотрел все темы, но не нашел ответа, связанного с моим вопросом.

Я тестирую webview apk. Я открываю URL-адрес («http://m.youdao.com /«) и хотите ввести текст в поле редактирования и нажать кнопку исследования.

Кнопка не имеет идентификатора и имени, см. HTML по просмотру источника в Интернете.

Теперь запрос (*) работает и выводит много вещей, но вопрос в том, какой из них связан с текстовым полем, а какой — с кнопкой. Я хочу ввести «тест» в текстовое поле и нажать кнопку поиска.

результат запроса: irb (main): 006:0> запрос «*» [ [ 0] { «id» => nil, «enabled» => true, «contentDescription» => nil, «class» => «com.android.internal.policy.impl.PhoneWindow $ DecorView», «rect» => { «center_y» => 142,0, «center_x» => 120,0, «высота» => 284, «y» => 0, «ширина» => 240, «x» => 0 }, «описание» => «com.android.internal.policy.impl.PhoneWindow $ DecorView {b2da1390 V.E…………I. 0,0-240,284}» }, [ 1] { » идентификатор» => «action_bar_overlay_layout», «включено» => true, «contentDescription» => nil, «класс» => «com.android.internal.widget.ActionBarOverlayLayout», «rect» => { «center_y» => 142,0, «center_x» => 120,0, «высота» => 284, «y» => 0, «ширина» => 240, «x» => 0 }, «description» => «com.android.internal.widget.ActionBarOverlayLayout{b2dfed00 V .ED…. …… I. 0,0-240,284 #1020313 android: идентификатор /action_bar_overlay_layout}» }, [2] { «идентификатор» => «содержимое», «включено» => true, «Описание содержимого» => ноль, «класс»=> «android.widget.FrameLayout», «rect» => { «center_y» => 169,5, «center_x» => 120,0, «высота» => 229, «y» => 55, «ширина» => 240, «x» => 0 }, «описание» => «android.виджет.FrameLayout{b2da5930 V.E….. …… I. 0,55-240,284 #1020002 android: id /content}» }, [3] { «id» => «контейнер», «включено» => true, «contentDescription» => nil, «класс» => «android.widget.FrameLayout», «rect» => { «center_y» => 169,5, «center_x» => 120,0, «height» => 229, «y» => 55, «width» => 240, «x» => 0 }, «description» => «android.widget.FrameLayout{b2df76d0 V.E….. …… I. 0,0-240,229 #7f05003c приложение: идентификатор / контейнер}» }, [4] { «id» => nil, «enabled» => true, «contentDescription» => nil, «class» => «android.support.v4.app.NoSaveStateFrameLayout», «rect» => { «center_y» => 169,5, «center_x» => 120,0, «высота» => 229, «y» => 55, «ширина» => 240, «x» => 0}, «description» => «android.support.v4.app.NoSaveStateFrameLayout{b2e2c3b8 V.E….. …… I. 0,0-240,229}» }, [ 5] { » идентификатор » => ноль, «включено» => истина, «Описание содержимого» => ноль, «класс» => «android.widget.LinearLayout», «rect» => { «center_y» => 169.5, «center_x» => 120.0, «высота» => 229, «y» => 55, «ширина» => 240, «x» => 0 }, «описание» => «android.widget.LinearLayout{b2df86d8 V.E….. …… I. 0,0-240,229}» }, [ 6] { » идентификатор» => «mywebview», «включено» => true, «contentDescription» => «Веб-просмотр», «класс» => «android.webkit.WebView», «rect» => { «center_y» => 169,5, «center_x» => 120,0, «высота» => 229, «y» => 55, «ширина» => 240, «x» => 0 }, «описание» => «android.webkit.WebView{b2dbdd18 VFEDHVC. .F….I. 0,0-240,229 #7f05003d app: id / mywebview}» }, [7] { «id» => «action_bar_container», «enabled» => true, «contentDescription» => nil, «class» => «com.android.internal.widget.ActionBarContainer», «rect» => { «center_y» => 37,0, «center_x» => 120,0, «height» => 36, «y» => 19, «width» => 240, «x» => 0 }, «description» => «com.android.internal.widget.ActionBarContainer{b2dab088 V.ED…. …… I. 0,19-240,55 #1020314 android: id/action_bar_container}» }, [8] { «id» => «action_bar», «включено» => true, «contentDescription» => nil, «класс»=> «com.android.internal.widget.ActionBarView», «rect» => { «center_y» => 37,0, «center_x» => 120,0, «высота» => 36, «y» => 19, «ширина» => 240, «x» => 0 }, «описание» => «com.android.internal.widget.ActionBarView{b2d98560 V.E….. …… I. 0,0-240,36 #1020315 android: id/action_bar}» }, [9] { «id» => nil, «enabled» => false, «contentDescription» => nil, «класс» => «android.widget.LinearLayout», «rect» => { «center_y» => 37,0, «center_x» => 66,5, «высота» => 36, «y» => 19, «ширина» => 119, «x» => 7 }, «описание» => «android.виджет.LinearLayout{b2dab638 V …..C. ……I. 7,0-126,36}» }, [10] { » идентификатор » => ноль, «включено» => true, «contentDescription» => ноль, «class» => «com.android.internal.виджет.ActionBarView $ HomeView», «rect» => { «center_y» => 37,0, «center_x» => 22,0, «высота» => 36, «y» => 19, «ширина» => 30, «x» => 7 }, «описание» => «com.android.internal.widget.ActionBarView $HomeView{b2de3f00 V.E….. …… I. 0,0-30,36}» }, [11] { » идентификатор» => «главная страница», «включено» => true, «contentDescription» => nil, «class» => «android.widget.ImageView», «rect» => { «center_y» => 37,0, «center_x» => 22,0, «высота» => 24, «y» => 25, «ширина» => 24, «x» => 10 }, «описание» => «android.виджет.ImageView{b2e14210 V.ED…. …… I. 3,6-27,30 #102002c android: id/home}» }, [12] { «id» => nil, «enabled» => true, «contentDescription» => nil, «class» =>»android.widget.LinearLayout», «rect» => { «center_y» => 36,5, «center_x» => 81,5, «высота» => 19, «y» => 27, «ширина» => 89, «x» => 37 }, «описание» => «android.виджет.LinearLayout{b2dda508 V.E….. …… I. 30,8-119,27}» }, [13] { » идентификатор» => «action_bar_title», «включено» => true, «contentDescription» => nil, «class» => «android.widget.TextView», «text» => «TestWebView», «rect» => { «center_y» => 36,5, «center_x» => 78,5, «высота» => 19, «y» => 27, «ширина» => 83, «x» => 37 }, «описание» => «android.widget.TextView{b2dbc4b8 V.ED…. …… I. 0,0-83,19 #1020265 android: id/action_bar_title}» }, [14] { «id» => nil, «enabled» => true, «contentDescription» => nil, «class» =>»com.android.internal.view.menu.ActionMenuView», «rect» => { «center_y» => 37,0, «center_x» => 219,0, «высота» => 36, «y» => 19, «ширина» => 42, «x» => 198 }, «описание» => «com.android.internal.view.menu.ActionMenuView{b2df5188 V.ED…. …… I. 198,0-240,36}» }, [15] { » идентификатор» => ноль, «включено» => true, «contentDescription» => «Дополнительные параметры», «класс» => «com.android.internal.view.menu.ActionMenuPresenter$OverflowMenuButton», «rect» => { «center_y» => 37,0, «center_x» => 219,0, «высота» => 36, «y» => 19, «ширина» => 42, «x» => 198 }, «описание» => «com.android.internal.view.menu.ActionMenuPresenter$OverflowMenuButton{b2de1788 VFED ..C. ……I. 0,0-42,36}» } ] Вот моя функция и определение шага.
Функция: функция веб-просмотра

   Scenario: Test WebView

    Then I wait for 10 seconds

    Then I take a picture

    Then I enter "test" into input field with id "formInput" 

    Then I wait for 100 seconds

    Then I take a picture

    Then I press the button with id "input[class='btn']" // here i don't know use which property of the button to identify it ???

    Then I wait for 100 seconds

    Then I take a picture

Step definition is as bellow :
Then /^I enter "([^"]*)" into input field with id "([^"]*)"$/ do |text, css|


      performAction("set_text","WebView css:'input[text="TestWebView"]'",text)



end



Then /^I press the button with id "([^"]*)"$/ do |css|

      touch ("webView css:'input[contentDescription="More options"]'")
end



Then /^I touch the button with id "([^"]*)"$/ do | css|

  performAction('touch','css',css)

end



Then /^show the html source code$/ do

  performAction('dump_body_html')

end
  

Ответ №1:

  1. Выполнить calabash-android console path_to/your_app.apk ;

  2. Затем выполнить reinstall_apps , затем start_test_server_in_background и затем query "*"

Комментарии:

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

2. другой, я вспомнил, что я принял уведомление по электронной почте, но почему мне не отправляется электронное письмо, когда вы отвечаете на мой вопрос. Поэтому я прошу прощения за более поздний ответ.

3. когда я ввожу: calabash-android запускаю testWebView.apk -v, результатом будет: «bonusInformation»: [], «сообщение»: «»,»успех»: true

4. у меня много вопросов, спасибо за вашего пациента. И первый вопрос: из результата запроса я хочу знать, какую этикетку, тег или элемент следует использовать для поиска текстового поля и кнопки. Результат отличается от HTML, из HTML я вижу имя текстового поля «q», но я не могу найти «q» из результатов запроса *; и из html кнопка только со свойством класса «btn», и я также не могу найти btn из результатов запроса. Итак, я не знаю, почему многие люди используют query, чтобы помочь им, каково его использование?

5. Дмитрий, оба следующих метода работают нормально . performAction («set_text», «css», «ввод [name = q]», текст); performAction («set_text», «WebView css», «ввод [name = q]», текст) .