葫芦:选择从UIDatePickerview日期 [英] Calabash: Select a date from a UIDatePickerview

查看:141
本文介绍了葫芦:选择从UIDatePickerview日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在iPhone上的葫芦自动化测试。我需要选择一个日期选择器的日期。请指导我红宝石一步定义。

我想是这样

 然后我滚动日期选择最新2002-10-22


解决方案

我做了一些研究之后的解决方案。这code不是防弹的,但它为我工作得很好。我想有人会从中得到帮助。如果有谁知道如何改进这一点。请在这里添加它。

在步定义我想补充..

 然后/ ^ I滚动日期选择最新1985-01-01
#日期格式1985-01-01#确保日期选择器达
should_see_date_picker()
is_picker_in_date_mode()
MAXDATE = picker_maximum_date_time()
目标= Date.parse(target_date)
电流= Date.parse(datequery())如果(MAXDATE<目标)
  screenshot_and_raise目标日期#{}目标比日期选​​取器最大日期'#{} MAXDATE大
结束极限= 100
#=>设置年
  数= 0
  DIR =(target.year< current.year)? 下:涨
  直到(target.year == Date.parse(datequery())。一年)或(计数==极限)做
      日期= Date.parse(datequery())
      scroll_date_component(DIR,2,date.year)
#看跌期权(里面的循环1'#{}算'=>'#{} date.year')
    数+ = 1
  结束#=>每月设置
  数= 0
  DIR =(target.month< current.month)? 下:涨
  直到(target.month == Date.parse(datequery())。月)或(计数==极限)做
      日期= Date.parse(datequery())
      scroll_date_component(DIR,0,date.month)
#看跌期权(里面的循环2'#{}算'=>'#{} date.month')
    数+ = 1
  结束#=>集天
  数= 0
  DIR =(target.day< current.day)? 下:涨
  直到(target.day == Date.parse(datequery())。天)或(计数==极限)做
      日期= Date.parse(datequery())
      scroll_date_component(DIR,1,date.day)
#看跌期权(里面的循环3'#{}算'=>'#{} date.day')
    数+ = 1
  结束结束################################################## ########=> #####日期选择器的辅助方法。 #####    高清scroll_date_component(方向柱,组件)
      如果(列== 0)
        #=>一个月滚动需要月份名称字符串
        如果(direction.eql?上)
          month_str =日期:: MonthNames中[分量+ 1]
          触摸(pickerView滚动视图索引:#{}列标签文字:#{} month_str')
        ELSIF(direction.eql?下)
          month_str =日期:: MonthNames中[组件1]
          触摸(pickerView滚动视图索引:#{}列标签文字:#{} month_str')
        结束
      其他
        #=>日和春联是数字
        如果(direction.eql?上)
          触摸(pickerView滚动视图索引:#{}列标签文字:#{组件+ 1}')
        ELSIF(direction.eql?下)
          触摸(pickerView滚动视图索引:#{}列标签文字:#{组件 - 1}')
        结束
      结束
      睡眠(0.3)
    结束高清datequery()
   返回查询(日期选择器,日)。第一
结束高清should_see_date_picker()
  如果查询(日期选择器:日期).empty?
    screenshot_and_raise找不到日期选取器
  结束
结束高清is_picker_in_date_mode()
  RES =查询(日期选择器:datePickerMode)
  screenshot_and_raise希望看到一个日期选择器,如果res.empty?
  screenshot_and_raise希望看到UIDatePickerModeDate如果res.first!= 1
结束高清picker_maximum_date_time()
  RES =查询(日期选择器:maximumDate)
  screenshot_and_raise希望看到一个日期选择器,如果res.empty?
  返回DateTime.parse(res.first)如果(res.first)
结束

In Calabash Automation testing on iPhone. I need to select a date from a date picker. Please guide me with a ruby step definition.

I want something like

Then I scroll datepicker to date "2002-10-22" 

解决方案

I made a solution after some research. This code is not bulletproof but it works fine for me. I guess someone will get a help from this. if anyone knows how to improve this. please add it here.

In step definitions I add..

Then /^I scroll datepicker to date "1985-01-01"
# Date Format "1985-01-01"

# make sure date picker is up
should_see_date_picker()
is_picker_in_date_mode()
maxdate = picker_maximum_date_time()
target = Date.parse(target_date)
current = Date.parse(datequery())

if(maxdate<target)
  screenshot_and_raise "Target date'#{target}' is larger than maximum date'#{maxdate}' in date picker"
end

limit = 100
# => set year
  count = 0
  dir = (target.year < current.year) ? "down" : "up"
  until (target.year == Date.parse(datequery()).year) or (count==limit)  do
      date = Date.parse(datequery())
      scroll_date_component(dir, 2, date.year)
#      puts("Inside the loop1 '#{count}'=> '#{date.year}'" )
    count += 1
  end

# => set month
  count = 0
  dir = (target.month < current.month) ? "down" : "up"
  until (target.month == Date.parse(datequery()).month) or (count==limit)  do
      date = Date.parse(datequery())
      scroll_date_component(dir, 0, date.month)
#      puts("Inside the loop2 '#{count}'=> '#{date.month}'" )
    count += 1
  end

# => set day
  count = 0
  dir = (target.day < current.day) ? "down" : "up"
  until (target.day == Date.parse(datequery()).day) or (count==limit)  do
      date = Date.parse(datequery())
      scroll_date_component(dir, 1, date.day)
#      puts("Inside the loop3 '#{count}'=> '#{date.day}'" )
    count += 1
  end

end

#########################################################

# => ##### Date picker helper methods. #####

    def scroll_date_component(direction, column, component)
      if(column==0)
        # => Month scroll needs the month name string
        if (direction.eql? "up")
          month_str = Date::MONTHNAMES[component+1]
          touch("pickerView scrollView index:#{column} label text:'#{month_str}'")
        elsif (direction.eql? "down")
          month_str = Date::MONTHNAMES[component-1]
          touch("pickerView scrollView index:#{column} label text:'#{month_str}'")
        end
      else
        # => Day and year scrolls are numeric 
        if (direction.eql? "up")
          touch("pickerView scrollView index:#{column} label text:'#{component + 1}'")
        elsif (direction.eql? "down")
          touch("pickerView scrollView index:#{column} label text:'#{component - 1}'")
        end
      end
      sleep(0.3)
    end

def datequery()
   return query("datePicker","date").first 
end

def should_see_date_picker ()
  if query("datePicker", :date).empty?
    screenshot_and_raise "Could not find date picker"
  end
end

def is_picker_in_date_mode()
  res = query("datePicker", :datePickerMode)
  screenshot_and_raise "expected to see a date picker" if res.empty?
  screenshot_and_raise "expected to see UIDatePickerModeDate" if res.first!=1
end

def picker_maximum_date_time()
  res = query("datePicker", :maximumDate)
  screenshot_and_raise "expected to see a date picker" if res.empty?
  return DateTime.parse(res.first) if (res.first)
end

这篇关于葫芦:选择从UIDatePickerview日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆