briar 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/briar.gemspec CHANGED
@@ -14,15 +14,12 @@ Gem::Specification.new do |gem|
14
14
  gem.homepage = 'https://github.com/jmoody/briar'
15
15
  gem.license = 'MIT'
16
16
 
17
- #gem.add_runtime_dependency 'calabash-cucumber'
18
- gem.add_runtime_dependency 'calabash-cucumber', '0.9.151'
19
- gem.add_runtime_dependency 'rake', '10.1.0'
20
- gem.add_runtime_dependency 'bundler'
21
- gem.add_runtime_dependency 'lesspainful'
17
+ gem.add_runtime_dependency 'calabash-cucumber'
18
+ #gem.add_runtime_dependency 'calabash-cucumber', '0.9.159'
19
+ gem.add_runtime_dependency 'rake'
22
20
  gem.add_runtime_dependency 'syntax'
23
21
  gem.add_runtime_dependency 'rspec'
24
22
 
25
-
26
23
  # rubymine is not picking up development dependencies in the gemspec
27
24
  #gem.add_development_dependency 'rspec'
28
25
 
data/cucumber.yml.example CHANGED
@@ -1,4 +1,21 @@
1
- default: NO_LAUNCH=1 OS=ios5 SCREENSHOT_PATH=./cucumber-screenshots/ -f 'Slowhandcuke::Formatter' -f rerun -o rerun.txt
2
- slowhand: NO_LAUNCH=1 OS=ios5 SCREENSHOT_PATH=./cucumber-screenshots/ -f 'Slowhandcuke::Formatter' -f rerun -o rerun.txt
3
- wip: NO_LAUNCH=1 OS=ios5 SCREENSHOT_PATH=./cucumber-screenshots/ -f 'Slowhandcuke::Formatter' -f rerun -o rerun.txt --tags @wip:3 --wip --require features
1
+ <%
2
+
3
+ date = Time.now.strftime('%Y-%m-%d-%H%M-%S')
4
+ default_report = "./reports/calabash-#{date}.html"
5
+
6
+ ss_path = "#{Dir.pwd}/screenshots/"
7
+
8
+ `mkdir ./screenshots` unless File.exists?("./screenshots")
9
+ `mkdir ./reports` unless File.exists?("./reports")
10
+
11
+ %>
12
+
13
+ ss_path: SCREENSHOT_PATH=<%= ss_path %>
14
+ html_report: -f html -o <%= default_report %>
15
+
16
+ uai: DEVICE_TARGET=simulator
17
+
18
+ default: -p ss_path -p html_report -p uai
19
+
20
+
4
21
 
@@ -1,4 +1,3 @@
1
- #include Briar::Core
2
1
 
3
2
  Then /^I should (see|not see) (?:the|) "([^\"]*)" view$/ do |visibility, view_id|
4
3
  if visibility.eql? 'see'
@@ -7,3 +6,4 @@ Then /^I should (see|not see) (?:the|) "([^\"]*)" view$/ do |visibility, view_id
7
6
  should_not_see_view view_id
8
7
  end
9
8
  end
9
+
@@ -1,5 +1,5 @@
1
1
 
2
- When /^I touch (?:the|a) "([^"]*)" button, then I should see the "([^"]*)" view$/ do |button_id, view_id|
2
+ When /^I touch (?:the|a) "([^"]*)" button, (?:then I|I) should see (?:the|a) "([^"]*)" view$/ do |button_id, view_id|
3
3
  touch_button_and_wait_for_view button_id, view_id
4
4
  end
5
5
 
@@ -1,7 +1,9 @@
1
1
  #include Briar::Control::Slider
2
2
 
3
3
  When /^I change the "([^"]*)" slider to (\d+)$/ do |slider_id, value|
4
+ wait_for_query("slider marked:'#{slider_id}'")
4
5
  change_slider_value_to slider_id, value
6
+ step_pause
5
7
  @slider_that_was_changed = slider_id
6
8
  @slider_new_value = value
7
9
  end
@@ -5,8 +5,8 @@ Then /^I should see email body that contains "([^"]*)"$/ do |text|
5
5
  end
6
6
 
7
7
  Then /^I should see email view with body that contains "([^"]*)"$/ do |text|
8
- if !device.ios5?
9
- warn_about_ios6_email_view
8
+ unless device.ios5?
9
+ warn_about_no_ios5_email_view
10
10
  else
11
11
  wait_for_animation
12
12
  unless email_body_contains? text
@@ -23,8 +23,8 @@ Then /^I touch the "([^"]*)" row and wait to see the email view$/ do |row_id|
23
23
  should_see_row row_id
24
24
  touch("tableViewCell marked:'#{row_id}'")
25
25
  wait_for_animation
26
- if !device.ios5?
27
- warn_about_ios6_email_view
26
+ unless device.ios5?
27
+ warn_about_no_ios5_email_view
28
28
  else
29
29
  should_see_mail_view
30
30
  end
@@ -34,8 +34,8 @@ Then /^I touch the "([^"]*)" row and wait to see the email view$/ do |row_id|
34
34
  end
35
35
 
36
36
  Then /^I should see email view with "([^"]*)" in the subject$/ do |text|
37
- if !device.ios5?
38
- warn_about_ios6_email_view
37
+ unless device.ios5?
38
+ warn_about_no_ios5_email_view
39
39
  else
40
40
  wait_for_animation
41
41
  should_see_mail_view
@@ -46,8 +46,8 @@ Then /^I should see email view with "([^"]*)" in the subject$/ do |text|
46
46
  end
47
47
 
48
48
  Then /^I should see email view with recipients? "([^"]*)"$/ do |comma_sep_addrs|
49
- if !device.ios5?
50
- warn_about_ios6_email_view
49
+ unless device.ios5?
50
+ warn_about_no_ios5_email_view
51
51
  else
52
52
  should_see_recipients comma_sep_addrs
53
53
  end
@@ -59,8 +59,8 @@ Then /^I should see email view with to field set to "([^"]*)"$/ do |text|
59
59
  end
60
60
 
61
61
  Then /^I should see email view with text like "([^"]*)" in the subject$/ do |text|
62
- if !device.ios5?
63
- warn_about_ios6_email_view
62
+ unless device.ios5?
63
+ warn_about_no_ios5_email_view
64
64
  else
65
65
  should_see_mail_view
66
66
  wait_for_animation
@@ -71,10 +71,10 @@ Then /^I should see email view with text like "([^"]*)" in the subject$/ do |tex
71
71
  end
72
72
 
73
73
  When /^I cancel email editing I should see the "([^"]*)" view$/ do |view_id|
74
- if device.ios5?
74
+ unless device.ios5?
75
75
  delete_draft_and_wait_for view_id
76
76
  else
77
- warn_about_ios6_email_view
77
+ warn_about_no_ios5_email_view
78
78
  end
79
79
  end
80
80
 
@@ -36,4 +36,5 @@ Then /^I am done text editing$/ do
36
36
  else
37
37
  touch_button 'done text editing'
38
38
  end
39
+ 2.times { step_pause }
39
40
  end
@@ -9,7 +9,7 @@ Then /^I should (see|not see) "([^"]*)" in label "([^"]*)"$/ do |visibility, tex
9
9
  end
10
10
 
11
11
  Then /^I should (see|not see) label "([^"]*)" with text "([^"]*)"$/ do |visibility, name, text|
12
- if visibility.eql? "see"
12
+ if visibility.eql? 'see'
13
13
  should_see_label_with_text(name, text)
14
14
  else
15
15
  should_not_see_label_with_text(name, text)
@@ -39,9 +39,23 @@ Then /^I change the picker date time to "([^"]*)"$/ do |target_time|
39
39
  end
40
40
 
41
41
 
42
- Then /^I should see that the date picker is in time mode$/ do
43
- unless picker_is_in_time_mode
44
- screenshot_and_raise 'expected to see picker with time mode'
42
+ Then /^I should see that the date picker is in (time|date|date and time) mode$/ do |mode|
43
+ if mode.eql? 'time'
44
+ unless picker_is_in_time_mode
45
+ screenshot_and_raise 'expected to see picker with time mode'
46
+ end
47
+ end
48
+
49
+ if mode.eql? 'date'
50
+ unless picker_is_in_date_mode
51
+ screenshot_and_raise 'expected to see picker with date mode'
52
+ end
53
+ end
54
+
55
+ if mode.eql? 'date and time'
56
+ unless picker_is_in_date_and_time_mode
57
+ screenshot_and_raise 'expected to see picker with date and time mode'
58
+ end
45
59
  end
46
60
  end
47
61
 
@@ -55,6 +69,11 @@ Then /^I should see that the "([^"]*)" row has the time I just entered in the "(
55
69
  should_see_row_has_time_i_just_entered row_id, label_id
56
70
  end
57
71
 
72
+ When(/^I change the time on the picker to "([^"]*)", I should see the "([^"]*)" label has the correct time$/) do |time_str, label_id|
73
+ change_time_on_picker_with_time_str time_str
74
+ should_see_label_has_time_i_just_entered label_id
75
+ end
76
+
58
77
  # does not require a time or date change. picker needs to be visible
59
78
  Then /^I should see that the "([^"]*)" row has the same time as the picker in the "([^"]*)" label$/ do |row_id, label_id|
60
79
  should_see_row_has_label_with_time_on_picker row_id, label_id
@@ -20,6 +20,7 @@ end
20
20
 
21
21
  Then /^I touch (?:the) "([^"]*)" row and wait for (?:the) "([^"]*)" view to appear$/ do |row_id, view_id|
22
22
  wait_for_row row_id
23
+ step_pause
23
24
  touch_row_and_wait_to_see row_id, view_id
24
25
  end
25
26
 
@@ -94,12 +95,17 @@ Then /^I should see that the text I just entered is in the "([^"]*)" row "([^"]*
94
95
  end
95
96
 
96
97
  Then /^I move the "([^"]*)" row (up|down) (\d+) times? using the reorder edit control$/ do |row_id, dir, n|
98
+ if device.ios7?
99
+ pending 'reordering on iOS 7 (more specifically playback) is not supported'
100
+ end
101
+
97
102
  should_see_row row_id
98
103
  dir_str = (dir.eql?('up')) ? 'drag_row_up' : 'drag_row_down'
99
- n.to_i.times do (
100
- playback(dir_str,
101
- {:query => "tableViewCell marked:'#{row_id}' descendant tableViewCellReorderControl"})
102
- step_pause)
104
+ n.to_i.times do
105
+ (
106
+ playback(dir_str,
107
+ {:query => "tableViewCell marked:'#{row_id}' descendant tableViewCellReorderControl"})
108
+ step_pause)
103
109
  end
104
110
  end
105
111
 
@@ -113,13 +119,13 @@ end
113
119
 
114
120
  Then /^I should see a "([^"]*)" button in the "([^"]*)" row$/ do |button_id, row_id|
115
121
  should_see_row row_id
116
- arr = query("tableViewCell marked:'#{row_id}' descendant child tableViewCellContentView child button marked:'#{button_id}'", AI)
122
+ arr = query("tableViewCell marked:'#{row_id}' descendant button marked:'#{button_id}'", AI)
117
123
  (arr.length == 1)
118
124
  end
119
125
 
120
126
  Then /^I touch the "([^"]*)" button in the "([^"]*)" row$/ do |button_id, row_id|
121
127
  should_see_row row_id
122
- touch("tableViewCell marked:'#{row_id}' child tableViewCellContentView child button marked:'#{button_id}'")
128
+ touch("tableViewCell marked:'#{row_id}' descendant button marked:'#{button_id}'")
123
129
  end
124
130
 
125
131
  Then /^I should see a switch for "([^"]*)" in the "([^"]*)" row that is in the "([^"]*)" position$/ do |switch_id, row_id, on_off|
@@ -153,3 +159,8 @@ Then /^I should see that the "([^"]*)" row has image "([^"]*)"$/ do |row_id, ima
153
159
  should_see_row_with_image row_id, image_id
154
160
  end
155
161
 
162
+
163
+ Then(/^I should see that the "([^"]*)" row has no text in the "([^"]*)" label$/) do |row_id, label_id|
164
+ should_see_row_with_label_that_has_no_text
165
+ end
166
+
@@ -1,8 +1,6 @@
1
- Then /^I clear text view named "([^\"]*)"$/ do |name|
2
- res = query("textView marked:'#{name}'")
3
- if res
4
- clear_text("textView marked:'#{name}'")
5
- end
1
+ Then /^I clear (?:text|the text) view named "([^\"]*)"$/ do |name|
2
+ wait_for_query "textView marked:'#{name}'"
3
+ briar_clear_text(name)
6
4
  end
7
5
 
8
6
  Then /^I should not see "([^"]*)" text view$/ do |name|
@@ -10,11 +8,7 @@ Then /^I should not see "([^"]*)" text view$/ do |name|
10
8
  end
11
9
 
12
10
  Then /^I should see the text I just entered in the "([^"]*)" text view$/ do |text_view_id|
13
- should_see_text_view text_view_id
14
- text = query("textView marked:'#{text_view_id}'", :text).first
15
- unless @text_entered_by_keyboard.eql? text
16
- screenshot_and_raise "i expected to see '#{@text_entered_by_keyboard}' in text view '#{text_view_id}' but found '#{text}'"
17
- end
11
+ should_see_text_view_with_text text_view_id, @text_entered_by_keyboard
18
12
  end
19
13
 
20
14
  Then /^I should see text view "([^"]*)" with placeholder text "([^"]*)"$/ do |text_view, placeholder|
data/lib/briar.rb CHANGED
@@ -3,9 +3,12 @@
3
3
  DEVICE_ENDPOINT = (ENV['DEVICE_ENDPOINT'] || 'http://localhost:37265')
4
4
  TOUCH_TRANSITION_TIMEOUT = 30.0
5
5
  TOUCH_TRANSITION_RETRY_FREQ = 0.5
6
- BRIAR_STEP_PAUSE = (ENV['STEP_PAUSE'] || 0.4).to_f
6
+ BRIAR_STEP_PAUSE = (ENV['STEP_PAUSE'] || 0.5).to_f
7
+ BRIAR_WAIT_TIMEOUT = (ENV['WAIT_TIMEOUT'] || 2.0).to_f
7
8
  ANIMATION_PAUSE = (ENV['ANIMATION_PAUSE'] || 0.6).to_f
9
+ #noinspection RubyConstantNamingConvention
8
10
  AI = :accessibilityIdentifier
11
+ #noinspection RubyConstantNamingConvention
9
12
  AL = :accessibilityLabel
10
13
 
11
14
  require 'briar/version'
@@ -60,6 +63,12 @@ def device ()
60
63
  end
61
64
  end
62
65
 
66
+ def uia_available?
67
+ launcher = Calabash::Cucumber::Launcher.launcher
68
+ return false if launcher.nil?
69
+ launcher.active?
70
+ end
71
+
63
72
  #noinspection RubyDefParenthesesInspection
64
73
  def gestalt ()
65
74
  pending("deprecated 0.0.8: replaced with Calabash::Cucumber::Device implementation - from now on use use 'device.*'")
@@ -33,7 +33,7 @@ module Briar
33
33
  end
34
34
  end
35
35
 
36
- def wait_for_sheet (sheet_id, timeout=1.0)
36
+ def wait_for_sheet (sheet_id, timeout=BRIAR_WAIT_TIMEOUT)
37
37
  msg = "waited for '#{timeout}' seconds but did not see '#{sheet_id}'"
38
38
  wait_for(:timeout => timeout,
39
39
  :retry_frequency => 0.2,
@@ -43,7 +43,7 @@ module Briar
43
43
  end
44
44
  end
45
45
 
46
- def wait_for_sheet_to_disappear(sheet_id, timeout=1.0)
46
+ def wait_for_sheet_to_disappear(sheet_id, timeout=BRIAR_WAIT_TIMEOUT)
47
47
  msg = "waited for '#{timeout}' seconds for '#{sheet_id}' to disappear but it is still visible"
48
48
  options = {:timeout => timeout,
49
49
  :retry_frequency => 0.2,
@@ -1,27 +1,88 @@
1
1
  module Briar
2
2
  module Alerts_and_Sheets
3
+
4
+
5
+ # of interest
6
+ # touch("view:'_UIModalItemAlertContentView' descendant view:'_UIModalItemTableViewCell' marked:'OK'")
7
+
3
8
  def alert_exists? (alert_id=nil)
4
- if alert_id.nil?
5
- !query('alertView').empty?
9
+ if device.ios7?
10
+ res = send_uia_command command:'uia.alert() != null'
11
+ res['value']
6
12
  else
7
- !query("alertView marked:'#{alert_id}'").empty?
13
+ if alert_id.nil?
14
+ !query('alertView').empty?
15
+ else
16
+ !query("alertView marked:'#{alert_id}'").empty?
17
+ end
8
18
  end
9
19
  end
10
20
 
11
21
  def should_see_alert (alert_id=nil)
12
22
  unless alert_exists? alert_id
13
- screenshot_and_raise "should see alert view marked '#{alert_id}'"
23
+ if alert_id.nil?
24
+ screenshot_and_raise 'should see alert view'
25
+ else
26
+ screenshot_and_raise "should see alert view marked '#{alert_id}'"
27
+ end
14
28
  end
15
29
  end
16
30
 
17
31
  def should_not_see_alert (alert_id=nil)
18
32
  if alert_exists? alert_id
19
- screenshot_and_raise "should not see alert view marked '#{alert_id}'"
33
+ if alert_id.nil?
34
+ screenshot_and_raise 'should not see alert view'
35
+ else
36
+ screenshot_and_raise "should not see alert view marked '#{alert_id}'"
37
+ end
38
+ end
39
+ end
40
+
41
+ def should_see_alert_with_title (title, timeout=BRIAR_WAIT_TIMEOUT)
42
+ warn 'cannot distinguish between alert titles and messages'
43
+ if device.ios7?
44
+ should_see_alert()
45
+ if uia_query(:view, marked:"#{title}").empty?
46
+ screenshot_and_raise "expected to see alert with title '#{title}'"
47
+ end
48
+ else
49
+ qstr = 'alertView child label'
50
+ msg = "waited for '#{timeout}' for alert with title '#{title}'"
51
+ wait_for(:timeout => timeout,
52
+ :retry_frequency => 0.2,
53
+ :post_timeout => 0.1,
54
+ :timeout_message => msg) do
55
+ query(qstr, :text).include?(title)
56
+ end
57
+ end
58
+ end
59
+
60
+ def should_see_alert_with_message (message)
61
+ warn 'cannot distinguish between alert titles and messages'
62
+ if device.ios7?
63
+ should_see_alert()
64
+ if uia_query(:view, marked:"#{message}").empty?
65
+ screenshot_and_raise "expected to see alert with title '#{message}'"
66
+ end
67
+ else
68
+ qstr = 'alertView child label'
69
+ msg = "waited for '#{timeout}' for alert with message '#{message}'"
70
+ wait_for(:timeout => timeout,
71
+ :retry_frequency => 0.2,
72
+ :post_timeout => 0.1,
73
+ :timeout_message => msg) do
74
+ query(qstr, :text).include?(title)
75
+ end
20
76
  end
21
77
  end
22
78
 
23
79
  def alert_button_exists? (button_id)
24
- query('alertView child button child label', :text).include?(button_id)
80
+ if device.ios7?
81
+ should_see_alert()
82
+ not uia_query(:view, marked:"#{button_id}").empty?
83
+ else
84
+ query('alertView child button child label', :text).include?(button_id)
85
+ end
25
86
  end
26
87
 
27
88
  def should_see_alert_button (button_id)
@@ -31,24 +92,22 @@ module Briar
31
92
  end
32
93
 
33
94
  def dismiss_alert_with_button (button_label)
34
- touch("alertView child button marked:'#{button_label}'")
35
- wait_for_view_to_disappear 'alertView'
36
- end
37
-
38
- def should_see_alert_with_title (title)
39
- unless query('alertView child label', :text).include?(title)
40
- screenshot_and_raise "i do not see an alert view with title '#{title}'"
95
+ touch_alert_button(button_label)
96
+ if device.ios7?
97
+ wait_for_view_to_disappear button_label
98
+ else
99
+ wait_for_view_to_disappear 'alertView'
41
100
  end
42
101
  end
43
102
 
44
- def should_see_alert_with_message (message)
45
- unless query('alertView descendant label', :text).include?(message)
46
- screenshot_and_raise "i do not see an alert view with message '#{message}'"
47
- end
48
- end
49
103
 
50
104
  def touch_alert_button(button_title)
51
- touch("alertView child button marked:'#{button_title}'")
105
+ should_see_alert()
106
+ if device.ios7?
107
+ touch("view marked:'#{button_title}'")
108
+ else
109
+ touch("alertView child button marked:'#{button_title}'")
110
+ end
52
111
  step_pause
53
112
  end
54
113
  end