#ruby #calabash #calabash-ios
#ruby #calabash #calabash-ios
Вопрос:
Я пишу несколько тестов в calabash и пытаюсь использовать функцию страницы внутри вспомогательного класса.
У меня есть файл моих шагов
Given /^I am on my page$/ do
mypage = page(MyPage)
MyPageHelper.DoMultiActionStep()
end
И мой файл подкачки
class MyPage < Calabash::ABase
def my_element_exists
element_exists(MY_ELEMENT_QUERY)
end
end
И мой вспомогательный файл
class MyPageHelper
def self.DoMultiActionStep
mypage = page(MyPage)
mypage.do_action_one
mypage.my_element_exists
end
end
Когда я запускаю это, я получаю сообщение об ошибке
неопределенный метод ‘page’ для MyPageHelper:Class (NoMethodError)
Функция страницы отлично работает в файле steps, но, похоже, у нее просто проблема с вызовом из класса MyPageHelper. Возможно ли это сделать? Есть ли оператор using, который мне нужно добавить?
Спасибо!
Комментарии:
1. calabash-ios находится в тегах, но вы используете Calabash::ABase, который из calabash-android. В этом проблема?
2. ах, очень возможно. У меня есть тесты для Android и ios. Что я должен использовать в тестах ios вместо ABase?
3. Я изменил ее на IBase и повторно запустил, но все равно столкнулся с той же проблемой.
Ответ №1:
Боюсь, что я не знаю, как ответить на ваш вопрос напрямую.
Рискуя быть обжигающим, я рекомендую альтернативный подход.
Вариант 1: Если вам не нужен вспомогательный класс, не беспокойтесь об этом.
Я понимаю, что ваш фактический код, вероятно, более сложный, но нужен ли вам помощник здесь? Почему бы не реализовать do_multi_action_step
в классе MyPage как метод?
def do_multi_action_step
my_element_exists
my_other_method
end
Вариант 2: передать экземпляр MyPage
На вашем шаге вы создали экземпляр MyPage. Вы должны использовать этот экземпляр вместо создания нового MyPageHelper.do_multi_action_step
.
def self.do_multi_action_step(my_page)
my_page.my_element_exists
my_page.my_other_method
end
Пример:
# my_page_steps.rb
Given /^I am on my page$/ do
# use the await method to wait for your page
my_page = page(MyPage).await
# pass an instance instead of creating a new one
MyPageHelper.do_multi_action_step(my_page)
# or just use a method on the MyPage instance
my_page.do_multi_action_step
end
# my_page_helper.rb
class MyPageHelper
# pass the page as an object
def self.do_multi_action_step(my_page)
my_page.my_element_exists
my_page.my_other_method
end
end
# my_page.rb
require 'calabash-cucumber/ibase'
class MyPage < Calabash::IBase
# some view that is unique to this page
def trait
"view marked:'some mark'"
end
def my_element_exists
element_exists("view marked:'foo'")
end
def my_other_method
puts 'do something else'
end
# why not do this instead?
def do_multi_action_step
my_element_exists
my_other_method
end
end