Как вызвать общий метод Calabash при использовании модели класса на основе представления?

Я следую модели класса на основе представления для настройки среды тестирования Calabash для своего приложения, т. Е. Каждое представление имеет класс, содержащий необходимые методы для этого представления.

Но когда я вызываю функции калебаса, такие как «wait_for()», это выдает мне ошибку:

неопределенный метод `wait_for' для LoggedInPage:Class (NoMethodError)

Я уже добавил их в свой env.rb

 require 'calabash-cucumber/wait_helpers'
 require 'calabash-cucumber/operations'
 World(Calabash::Cucumber::Operations)
 World(Calabash::Cucumber::WaitHelpers)

person user3551557    schedule 06.04.2015    source источник


Ответы (1)


Проблема, вероятно, в том, что классы объектов страницы не инициализируются в том же «мире», в котором работает огурец. Добавление файлов в env добавляет их и их методы в мир, в котором работает огурец. Вы должны передать этот мир в свои объекты страницы, когда они создаются, чтобы предоставить им доступ к этим функциям.

Унаследуйте классы объектов вашей страницы от баз объектов страницы калебасов — http://www.rubydoc.info/gems/calabash-cucumber/Calabash/IBase, и когда вы создаете новый экземпляр объекта страницы, переходите в self.

class MyPage < Calabash::IBase
...

new_instance_of_page_object = MyPage.new(self)

В этом конкретном случае наследование от IBase даст вам доступ к функциям, о которых вы говорите, но передача себя будет означать, что у вас есть доступ к любым другим вещам, которые вы добавили в свой файл env.

person alannichols    schedule 07.04.2015
comment
alannichols правильно, за исключением того, что соглашение заключается в использовании page(MyPage) для создания новых экземпляров подклассов Calabash::IBase. Вот ссылка на пример проекта: github.com/calabash/ios-webview-test -приложение - person jmoody; 07.04.2015