zucchini-ios 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,9 @@
1
+ ## 0.7.3 / 2013-08-20
2
+ * Fix timing problems due to mechanic.js changing timeout to 0 - [@phatmann][]
3
+ * Fix: When using run -p, the orientation-specific masks are not used - [@phatmann][], [#36][]
4
+ * Fix: Tapping an element shows "(null).tap()" in the log - [@phatmann][], [#37][]
5
+ * Ignore error-based UIAutomation screenshots - [@phatmann], [#38][]
6
+
1
7
  ## 0.7.2 / 2013-08-19
2
8
  * Implement orientation specific masks - [@phatmann][], [#34][]
3
9
  * Archivable HTML reports - [@vaskas][], [#33][]
@@ -72,6 +78,9 @@
72
78
  [#32]: https://github.com/zucchini-src/zucchini/issues/32
73
79
  [#33]: https://github.com/zucchini-src/zucchini/issues/33
74
80
  [#34]: https://github.com/zucchini-src/zucchini/issues/34
81
+ [#36]: https://github.com/zucchini-src/zucchini/issues/36
82
+ [#37]: https://github.com/zucchini-src/zucchini/issues/37
83
+ [#38]: https://github.com/zucchini-src/zucchini/issues/38
75
84
 
76
85
  [@Jaco-Pretorius]: https://github.com/Jaco-Pretorius
77
86
  [@NathanSudell]: https://github.com/NathanSudell
@@ -36,16 +36,18 @@ class Zucchini::Feature
36
36
  end
37
37
 
38
38
  def screenshots(process = true)
39
- log = Zucchini::Log.new(run_path) if process && @screenshot_log_exists
39
+ log = Zucchini::Log.new(run_path) if process && Zucchini::Log.exists?(run_path)
40
40
 
41
41
  @screenshots ||= Dir.glob("#{run_path}/*.png").sort.map do |file|
42
+ next unless Zucchini::Screenshot.valid?(file)
43
+
42
44
  screenshot = Zucchini::Screenshot.new(file, @device, log)
43
45
  if process
44
46
  screenshot.mask
45
47
  screenshot.compare
46
48
  end
47
49
  screenshot
48
- end + unmatched_pending_screenshots
50
+ end.compact + unmatched_pending_screenshots
49
51
  end
50
52
 
51
53
  def stats
@@ -69,7 +71,7 @@ class Zucchini::Feature
69
71
  @js_exception = true if (out.match /JavaScript error/) || (out.match /Instruments\ .{0,5}\ Error\ :/ )
70
72
  ensure
71
73
  `rm -rf instrumentscli*.trace`
72
- @screenshot_log_exists = Zucchini::Log.parse_automation_log(run_path)
74
+ Zucchini::Log.parse_automation_log(run_path)
73
75
  end
74
76
  end
75
77
  end
@@ -6,15 +6,11 @@ class Zucchini::Log
6
6
  attr_reader :screenshot_log_path
7
7
 
8
8
  def initialize(path)
9
- @screenshot_log_path = File.join(path, YAML_FILE)
9
+ @screenshot_log_path = Zucchini::Log.screenshot_log_path(path)
10
10
  raise "Screenshot log not found at #{@screenshot_log_path}" unless File.exists?(@screenshot_log_path)
11
11
  @screenshots = File.open(@screenshot_log_path, 'r') { |f| YAML.load(f) }
12
12
  end
13
13
 
14
- def exists?
15
- @screenshots != nil
16
- end
17
-
18
14
  def screenshot_metadata(sequence_number)
19
15
  raise "Invalid screenshot sequence number #{sequence_number}" if sequence_number > @screenshots.size
20
16
  @screenshots[sequence_number - 1]
@@ -54,6 +50,14 @@ class Zucchini::Log
54
50
  false
55
51
  end
56
52
  end
53
+
54
+ def self.exists?(path)
55
+ File.exists?(screenshot_log_path(path))
56
+ end
57
+
58
+ def self.screenshot_log_path(path)
59
+ File.join(path, YAML_FILE)
60
+ end
57
61
  end
58
62
 
59
63
 
@@ -104,6 +104,10 @@ class Zucchini::Screenshot
104
104
  end
105
105
  end
106
106
 
107
+ def self.valid?(file_path)
108
+ FILE_NAME_PATTERN =~ File.basename(file_path)
109
+ end
110
+
107
111
  private
108
112
  def mask_path(path)
109
113
  suffix = case @orientation
@@ -148,7 +148,7 @@ var mechanic = (function() {
148
148
  };
149
149
 
150
150
  UIAElement.prototype.getElementsByAttr = function(attr, value) {
151
- return $.map(this.elements().toArray(), function(el) {
151
+ return $.map(this.elements(), function(el) {
152
152
  var matches = el.getElementsByAttr(attr, value),
153
153
  val = el[attr]
154
154
  if (typeof val == 'function') val = val.apply(el)
@@ -158,7 +158,7 @@ var mechanic = (function() {
158
158
  })
159
159
  }
160
160
  UIAElement.prototype.getElementsByType = function(type) {
161
- return $.map(this.elements().toArray(), function(el) {
161
+ return $.map(this.elements(), function(el) {
162
162
  var matches = el.getElementsByType(type);
163
163
  if (el.isType(type)) matches.unshift(el);
164
164
  return matches;
@@ -15,7 +15,7 @@ raise = (message) -> throw new Error(message)
15
15
  # Handle both cases
16
16
  _elementFrom = (finder) ->
17
17
  res = finder()
18
- res = res[0] if (typeof res.length is 'number')
18
+ res = res[0] if res and typeof res.length is 'number'
19
19
  res
20
20
 
21
21
  # Execute a finder function until the element appears
@@ -24,14 +24,15 @@ wait = (finder) ->
24
24
  counter = 0
25
25
  element = null
26
26
 
27
- while not found and (counter < 10)
27
+ while not found and counter < 10
28
28
  element = _elementFrom finder
29
29
 
30
- if element? and element.isValid() and element.isVisible()
30
+ if element? and element.checkIsValid() and element.isVisible()
31
31
  found = true
32
32
  else
33
33
  target.delay 0.5
34
34
  counter++
35
+
35
36
  if found then element else false
36
37
 
37
38
  rotateTo = (orientation) ->
@@ -38,8 +38,7 @@ class Screen
38
38
  'Wait for "([^"]*)" second[s]*$': (seconds) -> target.delay(seconds)
39
39
 
40
40
  'Type "([^"]*)" in the "([^"]*)" field$': (text, name) ->
41
- @element(name).tap()
42
- app.keyboard().typeString text
41
+ $(@element(name)).input(text)
43
42
 
44
43
  'Clear the "([^"]*)" field$': (name) -> @element(name).setValue ''
45
44
 
@@ -1,3 +1,3 @@
1
1
  module Zucchini
2
- VERSION = "0.7.2"
2
+ VERSION = "0.7.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zucchini-ios
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-18 00:00:00.000000000 Z
12
+ date: 2013-08-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clamp
@@ -170,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  version: '0'
171
171
  segments:
172
172
  - 0
173
- hash: 3231635061301993483
173
+ hash: 2982676141383125946
174
174
  requirements: []
175
175
  rubyforge_project:
176
176
  rubygems_version: 1.8.23