gametel 0.7 → 0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/features/has_view.feature +2 -0
- data/features/step_definitions/checkbox_steps.rb +5 -0
- data/features/step_definitions/has_view_steps.rb +6 -4
- data/features/step_definitions/webview_steps.rb +74 -5
- data/features/support/env.rb +1 -6
- data/features/support/screens/controls_screen.rb +1 -0
- data/features/support/screens/midex_webview_screen.rb +8 -0
- data/features/support/screens/webview_screen.rb +3 -2
- data/features/view.feature +16 -0
- data/features/webview.feature +61 -6
- data/lib/gametel.rb +3 -58
- data/lib/gametel/accessors.rb +7 -1
- data/lib/gametel/platforms/brazenhead/button.rb +0 -21
- data/lib/gametel/platforms/brazenhead/view.rb +10 -2
- data/lib/gametel/platforms/brazenhead/webview.rb +33 -0
- data/lib/gametel/platforms/brazenhead_platform.rb +5 -1
- data/lib/gametel/version.rb +1 -1
- data/lib/gametel/views.rb +1 -0
- data/lib/gametel/views/button.rb +5 -19
- data/lib/gametel/views/image.rb +2 -20
- data/lib/gametel/views/progress.rb +2 -21
- data/lib/gametel/views/spinner.rb +2 -21
- data/lib/gametel/views/view.rb +20 -3
- data/lib/gametel/views/web_view.rb +44 -0
- data/lib/gametel/webview.rb +19 -0
- data/lib/gametel/webview/accessors.rb +55 -0
- data/lib/gametel/webviewable.rb +67 -0
- data/spec/lib/gametel/accessors_spec.rb +22 -15
- data/spec/lib/gametel_spec.rb +12 -6
- metadata +44 -22
- checksums.yaml +0 -15
- data/features/support/ApiDemos.apk +0 -0
- data/features/support/debug.keystore +0 -0
- data/features/support/screens/webview_main_screen.rb +0 -8
data/features/has_view.feature
CHANGED
@@ -3,7 +3,9 @@ Feature: Determining whether or not a view exists
|
|
3
3
|
Scenario: Checking the existence of a view
|
4
4
|
When I'm on the buttons screen
|
5
5
|
Then we should know that the view with id "button_normal" exists
|
6
|
+
And we should know that the view with class "android.widget.Button" exists
|
6
7
|
|
7
8
|
Scenario: Checking the absence of a view
|
8
9
|
When I'm on the buttons screen
|
9
10
|
Then we should know that the view with id "checkbox_button" does not exist
|
11
|
+
And we should know that the view with class "android.widget.ListView" does not exist
|
@@ -4,3 +4,8 @@ Then /^I should be able to click a checkbox by "(.*?)"$/ do |how|
|
|
4
4
|
screen.send("checkbox_#{how}_view").should be_checked
|
5
5
|
end
|
6
6
|
end
|
7
|
+
|
8
|
+
Then /^the checkbox identified by "(.*?)" should be checked$/ do |how|
|
9
|
+
on(ControlsScreen).send("checkbox_#{how}_checked?").should be_true
|
10
|
+
end
|
11
|
+
|
@@ -1,12 +1,14 @@
|
|
1
|
-
Then /^we should know that the view with
|
1
|
+
Then /^we should know that the view with (\w+) "(.*?)" exists$/ do |how, what|
|
2
2
|
on(ButtonScreen) do |screen|
|
3
|
-
|
3
|
+
locator = {}; locator[how.to_sym] = what
|
4
|
+
screen.should have_view(locator)
|
4
5
|
end
|
5
6
|
end
|
6
7
|
|
7
|
-
Then /^we should know that the view with
|
8
|
+
Then /^we should know that the view with (\w+) "(.*?)" does not exist$/ do |how, what|
|
8
9
|
on(ButtonScreen) do |screen|
|
9
|
-
|
10
|
+
locator = {}; locator[how.to_sym] = what
|
11
|
+
screen.should_not have_view(locator)
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
@@ -1,14 +1,83 @@
|
|
1
1
|
Given(/^I have navigated to the webview screen$/) do
|
2
|
-
on(
|
2
|
+
on(MainMenuScreen) do |screen|
|
3
|
+
screen.views
|
4
|
+
screen.wait_for_text 'Buttons'
|
5
|
+
end
|
6
|
+
on(ViewsMenuScreen).webview
|
3
7
|
end
|
4
8
|
|
5
|
-
When(/^I click the text "(.*?)"
|
6
|
-
on(
|
9
|
+
When(/^I click the text "(.*?)" in a webview$/) do |text|
|
10
|
+
on(MixedWebviewScreen).click_on_text text
|
7
11
|
end
|
8
12
|
|
9
13
|
Then(/^I should see the text "(.*?)" in a webview$/) do |text|
|
14
|
+
on(MixedWebviewScreen).should have_text(text)
|
15
|
+
end
|
16
|
+
|
17
|
+
When(/^I look for elements in the webview$/) do
|
18
|
+
on(MixedWebviewScreen) do |screen|
|
19
|
+
screen.wait_for_text 'Welcome to Foundation'
|
20
|
+
@webview = screen.web_view
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Then(/^I should know the following elements exist:$/) do |table|
|
25
|
+
table.hashes.each do |hsh|
|
26
|
+
@webview.should have_element(hsh['locator'], hsh['value'])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
When(/^I click on the anchor with the text "(.*?)"$/) do |text|
|
31
|
+
@webview.click('textContent', text)
|
32
|
+
end
|
33
|
+
|
34
|
+
Then(/^I should be able to enter "(.*?)" into the text field$/) do |text|
|
35
|
+
on(MixedWebviewScreen).scroll_down
|
36
|
+
@webview.enter_text('id', 'tf', text)
|
37
|
+
end
|
38
|
+
|
39
|
+
Then(/^I should be able to type "(.*?)" into the text field$/) do |text|
|
40
|
+
on(MixedWebviewScreen).scroll_down
|
41
|
+
@webview.type_text('id', 'tf', text)
|
42
|
+
end
|
43
|
+
|
44
|
+
Then(/^I should be able to clear the text of the text field$/) do
|
45
|
+
@webview.clear_text('id', 'tf')
|
46
|
+
end
|
47
|
+
|
48
|
+
Then(/^I should be able to wait for the text field$/) do
|
49
|
+
@webview.wait_for_element('id', 'tf')
|
50
|
+
end
|
51
|
+
|
52
|
+
When(/^I click the text "(.*?)" in a webview screen$/) do |text|
|
53
|
+
on(WebviewScreen).click_on_text text
|
54
|
+
end
|
55
|
+
|
56
|
+
Then(/^I should see the text "(.*?)" in a webview screen$/) do |text|
|
57
|
+
on(WebviewScreen).should have_text(text)
|
58
|
+
end
|
59
|
+
|
60
|
+
When(/^I look for elements in the webview screen$/) do
|
61
|
+
on(WebviewScreen).wait_for_text 'Welcome to Foundation'
|
62
|
+
end
|
63
|
+
|
64
|
+
Then(/^I should know the following webview elements exist:$/) do |table|
|
65
|
+
table.hashes.each do |hsh|
|
66
|
+
on(WebviewScreen).should have_element(hsh['locator'], hsh['value'])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
When(/^I click on the anchor with the text "Some Other Page" on that screen$/) do
|
71
|
+
on(WebviewScreen).some_other_page
|
72
|
+
end
|
73
|
+
|
74
|
+
Then(/^I should be able to enter "(.*?)" into the text field on that screen$/) do |text|
|
10
75
|
on(WebviewScreen) do |screen|
|
11
|
-
screen.
|
12
|
-
screen.
|
76
|
+
screen.scroll_down
|
77
|
+
screen.address = text
|
13
78
|
end
|
14
79
|
end
|
80
|
+
|
81
|
+
Then(/^I should be able to clear the text of the text field on that screen$/) do
|
82
|
+
on(WebviewScreen).clear_address
|
83
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -29,16 +29,11 @@ Gametel.keystore = {
|
|
29
29
|
}
|
30
30
|
|
31
31
|
|
32
|
-
Before
|
32
|
+
Before do
|
33
33
|
Gametel.apk_path = 'features/support/ApiDemos.apk'
|
34
34
|
@driver = Gametel.start('ApiDemos')
|
35
35
|
end
|
36
36
|
|
37
|
-
Before('@webview') do
|
38
|
-
Gametel.apk_path = 'webview_sample/bin/webview_sample-debug.apk'
|
39
|
-
driver = Gametel.start('MainActivity')
|
40
|
-
end
|
41
|
-
|
42
37
|
After do
|
43
38
|
Gametel.stop
|
44
39
|
end
|
@@ -6,6 +6,7 @@ class ControlsScreen
|
|
6
6
|
text(:text_field_name, :content_description => 'Edit Description')
|
7
7
|
view(:view_field_id, :id => 'edit')
|
8
8
|
view(:view_field_text, :text => 'textColorPrimary')
|
9
|
+
view(:view_field_class, :class => 'android.widget.CheckBox', :index => 1)
|
9
10
|
text(:button_field_id, :id => 'button')
|
10
11
|
text(:button_disabled_field_id, :id => 'button_disabled')
|
11
12
|
button(:enabled_save, :index => 0)
|
data/features/view.feature
CHANGED
@@ -5,6 +5,11 @@ Feature: Interacting with view elements
|
|
5
5
|
And I choose the List Dialogs button by id
|
6
6
|
Then I should see the "Command one" list item
|
7
7
|
|
8
|
+
Scenario: Clicking on views by their class
|
9
|
+
When I'm on the controls screen
|
10
|
+
Then I should be able to click a view by "class"
|
11
|
+
And the checkbox identified by "text" should be checked
|
12
|
+
|
8
13
|
Scenario: Clicking on view by their text
|
9
14
|
When I'm on the controls screen
|
10
15
|
Then I should be able to click a view by "text"
|
@@ -19,3 +24,14 @@ Feature: Interacting with view elements
|
|
19
24
|
| focused | true |
|
20
25
|
| selected | false |
|
21
26
|
| shown | true |
|
27
|
+
|
28
|
+
Scenario: Determining properties of a view
|
29
|
+
When I'm on the controls screen
|
30
|
+
Then the "view" field identified by "class" can determine the following properties:
|
31
|
+
| property | value |
|
32
|
+
| clickable | true |
|
33
|
+
| enabled | true |
|
34
|
+
| focusable | true |
|
35
|
+
| focused | false |
|
36
|
+
| selected | false |
|
37
|
+
| shown | true |
|
data/features/webview.feature
CHANGED
@@ -1,14 +1,69 @@
|
|
1
|
-
@webview
|
2
1
|
Feature: Adding support for webviews
|
3
2
|
|
4
3
|
Background:
|
5
4
|
Given I have navigated to the webview screen
|
6
5
|
|
6
|
+
Scenario: Clicking on text and checking if text exists
|
7
|
+
When I click the text "Some Other Page" in a webview
|
8
|
+
Then I should see the text "Welcome to Some Other Page" in a webview
|
9
|
+
|
10
|
+
Scenario: Checking for the existance of elements
|
11
|
+
When I look for elements in the webview
|
12
|
+
Then I should know the following elements exist:
|
13
|
+
| locator | value |
|
14
|
+
| className | panel |
|
15
|
+
| cssSelector | div.panel |
|
16
|
+
| tagName | p |
|
17
|
+
| textContent | Six columns |
|
18
|
+
|
19
|
+
Scenario: Clicking on a web element
|
20
|
+
When I look for elements in the webview
|
21
|
+
And I click on the anchor with the text "Some Other Page"
|
22
|
+
Then I should see the text "Welcome to Some Other Page" in a webview
|
23
|
+
|
24
|
+
Scenario: Entering text in a web element
|
25
|
+
When I look for elements in the webview
|
26
|
+
Then I should be able to enter "Some Text" into the text field
|
27
|
+
|
28
|
+
Scenario: Typing text in a web element
|
29
|
+
When I look for elements in the webview
|
30
|
+
Then I should be able to type "Some Text" into the text field
|
31
|
+
|
7
32
|
@focus
|
8
|
-
Scenario:
|
9
|
-
When I
|
10
|
-
Then I should
|
33
|
+
Scenario: Clearing the text in a web welement
|
34
|
+
When I look for elements in the webview
|
35
|
+
Then I should be able to enter "Some Text" into the text field
|
36
|
+
And I should be able to clear the text of the text field
|
37
|
+
|
38
|
+
Scenario: Waiting for a web element
|
39
|
+
When I look for elements in the webview
|
40
|
+
Then I should be able to wait for the text field
|
11
41
|
|
42
|
+
Scenario: Clicking on text and checking if text exists on webview screen
|
43
|
+
When I click the text "Some Other Page" in a webview screen
|
44
|
+
Then I should see the text "Welcome to Some Other Page" in a webview screen
|
45
|
+
|
46
|
+
Scenario: Checking for the existance of elements on webview screen
|
47
|
+
When I look for elements in the webview screen
|
48
|
+
Then I should know the following webview elements exist:
|
49
|
+
| locator | value |
|
50
|
+
| className | panel |
|
51
|
+
| cssSelector | div.panel |
|
52
|
+
| tagName | p |
|
53
|
+
| textContent | Six columns |
|
54
|
+
|
55
|
+
Scenario: Clicking on a web element on a webview screen
|
56
|
+
When I look for elements in the webview screen
|
57
|
+
And I click on the anchor with the text "Some Other Page" on that screen
|
58
|
+
Then I should see the text "Welcome to Some Other Page" in a webview screen
|
59
|
+
|
60
|
+
Scenario: Entering text in a web element on a webview screen
|
61
|
+
When I look for elements in the webview screen
|
62
|
+
Then I should be able to enter "Some Text" into the text field on that screen
|
63
|
+
|
64
|
+
@focus
|
65
|
+
Scenario: Clearing the text in a web welement on a webview screen
|
66
|
+
When I look for elements in the webview screen
|
67
|
+
Then I should be able to enter "Some Text" into the text field on that screen
|
68
|
+
And I should be able to clear the text of the text field on that screen
|
12
69
|
|
13
|
-
|
14
|
-
|
data/lib/gametel.rb
CHANGED
@@ -6,14 +6,12 @@ require 'gametel/waiter'
|
|
6
6
|
require 'gametel/version'
|
7
7
|
require 'gametel/platforms/brazenhead_platform'
|
8
8
|
require 'gametel/views'
|
9
|
+
require 'gametel/webview'
|
10
|
+
require 'gametel/webviewable'
|
9
11
|
|
10
12
|
module Gametel
|
11
13
|
include Gametel::Waiter
|
12
|
-
|
13
|
-
attr_reader :platform
|
14
|
-
|
15
|
-
ROBOTIUM_LEFT = 21
|
16
|
-
ROBOTIUM_RIGHT = 22
|
14
|
+
include Gametel::Webviewable
|
17
15
|
|
18
16
|
def self.included(cls)
|
19
17
|
cls.extend Gametel::Accessors
|
@@ -46,24 +44,6 @@ module Gametel
|
|
46
44
|
default_server.stop
|
47
45
|
end
|
48
46
|
|
49
|
-
def initialize(pform = :brazenhead)
|
50
|
-
@platform = Gametel::Platforms::BrazenheadPlatform.new if pform == :brazenhead
|
51
|
-
end
|
52
|
-
|
53
|
-
#
|
54
|
-
# click on the provided text
|
55
|
-
#
|
56
|
-
def click_on_text(text)
|
57
|
-
platform.click_on_text text
|
58
|
-
end
|
59
|
-
|
60
|
-
#
|
61
|
-
# Returns true if the provided text is found on the screen
|
62
|
-
#
|
63
|
-
def has_text?(text)
|
64
|
-
platform.has_text?(text)
|
65
|
-
end
|
66
|
-
|
67
47
|
#
|
68
48
|
# Returns true if the view is enabled
|
69
49
|
#
|
@@ -109,41 +89,6 @@ module Gametel
|
|
109
89
|
platform.enter
|
110
90
|
end
|
111
91
|
|
112
|
-
#
|
113
|
-
# scroll down
|
114
|
-
#
|
115
|
-
def scroll_down
|
116
|
-
platform.scroll_down
|
117
|
-
end
|
118
|
-
|
119
|
-
#
|
120
|
-
# scroll up
|
121
|
-
#
|
122
|
-
def scroll_up
|
123
|
-
platform.scroll_up
|
124
|
-
end
|
125
|
-
|
126
|
-
#
|
127
|
-
# scroll left
|
128
|
-
#
|
129
|
-
def scroll_left
|
130
|
-
platform.scroll_to_side ROBOTIUM_LEFT
|
131
|
-
end
|
132
|
-
|
133
|
-
#
|
134
|
-
# scroll right
|
135
|
-
#
|
136
|
-
def scroll_right
|
137
|
-
platform.scroll_to_side ROBOTIUM_RIGHT
|
138
|
-
end
|
139
|
-
|
140
|
-
#
|
141
|
-
# Wait for the provided text to appear
|
142
|
-
#
|
143
|
-
def wait_for_text(text_to_find)
|
144
|
-
platform.wait_for_text(text_to_find)
|
145
|
-
raise "Timed out waiting for the text '#{text_to_find}'" unless platform.last_json
|
146
|
-
end
|
147
92
|
|
148
93
|
end
|
149
94
|
|
data/lib/gametel/accessors.rb
CHANGED
@@ -118,6 +118,9 @@ module Gametel
|
|
118
118
|
define_method(name) do
|
119
119
|
platform.click_checkbox(locator)
|
120
120
|
end
|
121
|
+
define_method("#{name}_checked?") do
|
122
|
+
Gametel::Views::CheckBox.new(platform, locator).checked?
|
123
|
+
end
|
121
124
|
define_method("#{name}_view") do
|
122
125
|
Gametel::Views::CheckBox.new(platform, locator)
|
123
126
|
end
|
@@ -157,6 +160,7 @@ module Gametel
|
|
157
160
|
# The only valid keys are:
|
158
161
|
# * :id
|
159
162
|
# * :text
|
163
|
+
# * :class (:index => 0 implied)
|
160
164
|
#
|
161
165
|
def view(name, locator)
|
162
166
|
define_method(name) do
|
@@ -257,7 +261,9 @@ module Gametel
|
|
257
261
|
end
|
258
262
|
|
259
263
|
def webview(name, locator)
|
260
|
-
|
264
|
+
define_method("#{name}_view") do
|
265
|
+
Gametel::Views::WebView.new(platform, locator)
|
266
|
+
end
|
261
267
|
end
|
262
268
|
|
263
269
|
def action_item(name, locator)
|
@@ -16,27 +16,6 @@ module Gametel
|
|
16
16
|
block.call device if block
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
20
|
-
def get_button_property_by_index(index, property)
|
21
|
-
get_button_by_index(index) do |device|
|
22
|
-
device.send "is_#{property}"
|
23
|
-
end
|
24
|
-
last_response.body
|
25
|
-
end
|
26
|
-
|
27
|
-
def get_button_property_by_id(id, property)
|
28
|
-
get_view_by_id(id) do |device|
|
29
|
-
device.send "is_#{property}"
|
30
|
-
end
|
31
|
-
last_response.body
|
32
|
-
end
|
33
|
-
|
34
|
-
def get_button_property_by_text(text, property)
|
35
|
-
get_button_by_text(text) do |device|
|
36
|
-
device.send "is_#{property}"
|
37
|
-
end
|
38
|
-
last_response.body
|
39
|
-
end
|
40
19
|
end
|
41
20
|
end
|
42
21
|
end
|
@@ -10,6 +10,12 @@ module Gametel
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
def click_on_view_by_class(clazz, index)
|
14
|
+
get_view_by_index(clazz, index) do |device|
|
15
|
+
device.click_on_view('@@the_view@@', :target => 'Robotium')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
13
19
|
def get_view_by_id(id, &block)
|
14
20
|
chain_calls do |device|
|
15
21
|
device.id_from_name(id, :target => 'Brazenhead', :variable => '@@view_id@@')
|
@@ -21,8 +27,10 @@ module Gametel
|
|
21
27
|
def get_view_by_index(clazz, index, &block)
|
22
28
|
chain_calls do |device|
|
23
29
|
device.get_class
|
24
|
-
device.
|
25
|
-
device.
|
30
|
+
device.get_class_loader :variable => '@@loader@@'
|
31
|
+
device.get_class
|
32
|
+
device.for_name clazz, false, '@@loader@@', :variable => '@@the_type@@'
|
33
|
+
device.get_view '@@the_type@@', index || 0, :target => 'Robotium', :variable => '@@the_view@@'
|
26
34
|
block.call device if block
|
27
35
|
end
|
28
36
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'brazenhead'
|
2
|
+
|
3
|
+
module Gametel
|
4
|
+
module Platforms
|
5
|
+
module Webview
|
6
|
+
|
7
|
+
def click_on_webview(how, what, index=0, scroll=true)
|
8
|
+
find_web_element_by(how, what) do |device, by|
|
9
|
+
device.click_on_web_element(by, index, scroll, :target => :Robotium)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def enter_text_in_webview(how, what, text)
|
14
|
+
find_web_element_by(how, what) do |device, by|
|
15
|
+
device.enter_text_in_web_element(by, text, :target => :Robotium)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def clear_text_in_webview(how, what)
|
20
|
+
find_web_element_by(how, what) do |device, by|
|
21
|
+
device.clear_text_in_web_element(by, :target => :Robotium)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def find_web_element_by(how, what)
|
26
|
+
chain_calls do |device|
|
27
|
+
device.web_view_by(how, what, :variable => '@@by@@', :target => :Brazenhead)
|
28
|
+
yield device, '@@by@@'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -7,6 +7,7 @@ require File.join(File.dirname(__FILE__), 'brazenhead', 'spinner')
|
|
7
7
|
require File.join(File.dirname(__FILE__), 'brazenhead', 'text')
|
8
8
|
require File.join(File.dirname(__FILE__), 'brazenhead', 'view')
|
9
9
|
require File.join(File.dirname(__FILE__), 'brazenhead', 'list_item')
|
10
|
+
require File.join(File.dirname(__FILE__), 'brazenhead', 'webview')
|
10
11
|
|
11
12
|
|
12
13
|
module Gametel
|
@@ -21,6 +22,7 @@ module Gametel
|
|
21
22
|
include Gametel::Platforms::View
|
22
23
|
include Gametel::Platforms::ListItem
|
23
24
|
include Gametel::Platforms::Menu
|
25
|
+
include Gametel::Platforms::Webview
|
24
26
|
|
25
27
|
ENTER_KEY = 66
|
26
28
|
|
@@ -131,6 +133,7 @@ module Gametel
|
|
131
133
|
def click_view(locator)
|
132
134
|
result = click_on_text(locator[:text]) if locator[:text]
|
133
135
|
result = click_on_view_by_id(locator[:id]) if locator[:id]
|
136
|
+
result = click_on_view_by_class(locator[:class], locator[:index]) if locator[:class]
|
134
137
|
end
|
135
138
|
|
136
139
|
#
|
@@ -146,7 +149,8 @@ module Gametel
|
|
146
149
|
#
|
147
150
|
def has_view?(locator)
|
148
151
|
begin
|
149
|
-
result = get_view_by_id(locator)
|
152
|
+
result = get_view_by_id(locator[:id]) if locator[:id]
|
153
|
+
result = get_view_by_index(locator[:class], locator[:index]) if locator[:class]
|
150
154
|
result.body.include? 'windowLocation'
|
151
155
|
rescue Exception
|
152
156
|
false
|
data/lib/gametel/version.rb
CHANGED
data/lib/gametel/views.rb
CHANGED
data/lib/gametel/views/button.rb
CHANGED
@@ -4,26 +4,12 @@ module Gametel
|
|
4
4
|
|
5
5
|
protected
|
6
6
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
metaclass.send(:define_method, "#{property}?".to_sym) do
|
11
|
-
|
12
|
-
platform.get_view_by_id(locator[:id]) do |device|
|
13
|
-
device.send "is_#{property}"
|
14
|
-
end if locator[:id]
|
15
|
-
|
16
|
-
platform.get_button_by_index(locator[:index]) do |device|
|
17
|
-
device.send "is_#{property}"
|
18
|
-
end if locator[:index]
|
7
|
+
def get_view_by_index(clazz, index, &block)
|
8
|
+
platform.get_button_by_index(index, &block)
|
9
|
+
end
|
19
10
|
|
20
|
-
|
21
|
-
|
22
|
-
end if locator[:text]
|
23
|
-
|
24
|
-
platform.last_response.body == "true"
|
25
|
-
end
|
26
|
-
end
|
11
|
+
def get_view_by_text(text, &block)
|
12
|
+
platform.get_button_by_text(text, &block)
|
27
13
|
end
|
28
14
|
end
|
29
15
|
end
|
data/lib/gametel/views/image.rb
CHANGED
@@ -1,26 +1,8 @@
|
|
1
1
|
module Gametel
|
2
2
|
module Views
|
3
3
|
class Image < View
|
4
|
-
|
5
|
-
|
6
|
-
protected
|
7
|
-
|
8
|
-
def build_property_methods
|
9
|
-
metaclass = class << self; self; end
|
10
|
-
properties.each do |property|
|
11
|
-
metaclass.send(:define_method, "#{property}?".to_sym) do
|
12
|
-
|
13
|
-
platform.get_view_by_id(locator[:id]) do |device|
|
14
|
-
device.send "is_#{property}"
|
15
|
-
end if locator[:id]
|
16
|
-
|
17
|
-
platform.get_view_by_index(IMAGE_VIEW_CLASS, locator[:index]) do |device|
|
18
|
-
device.send "is_#{property}"
|
19
|
-
end if locator[:index]
|
20
|
-
|
21
|
-
platform.last_response.body == "true"
|
22
|
-
end
|
23
|
-
end
|
4
|
+
def view_class
|
5
|
+
'android.widget.ImageView'
|
24
6
|
end
|
25
7
|
end
|
26
8
|
end
|
@@ -2,28 +2,9 @@ module Gametel
|
|
2
2
|
module Views
|
3
3
|
class Progress < View
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
protected
|
8
|
-
|
9
|
-
def build_property_methods
|
10
|
-
metaclass = class << self; self; end
|
11
|
-
properties.each do |property|
|
12
|
-
metaclass.send(:define_method, "#{property}?".to_sym) do
|
13
|
-
|
14
|
-
platform.get_view_by_id(locator[:id]) do |device|
|
15
|
-
device.send "is_#{property}"
|
16
|
-
end if locator[:id]
|
17
|
-
|
18
|
-
platform.get_view_by_index(PROGRESS_BAR_CLASS, locator[:index]) do |device|
|
19
|
-
device.send "is_#{property}"
|
20
|
-
end if locator[:index]
|
21
|
-
|
22
|
-
platform.last_response.body == "true"
|
23
|
-
end
|
24
|
-
end
|
5
|
+
def view_class
|
6
|
+
'android.widget.ProgressBar'
|
25
7
|
end
|
26
|
-
|
27
8
|
|
28
9
|
end
|
29
10
|
end
|
@@ -2,28 +2,9 @@ module Gametel
|
|
2
2
|
module Views
|
3
3
|
class Spinner < View
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
protected
|
8
|
-
|
9
|
-
def build_property_methods
|
10
|
-
metaclass = class << self; self; end
|
11
|
-
properties.each do |property|
|
12
|
-
metaclass.send(:define_method, "#{property}?".to_sym) do
|
13
|
-
|
14
|
-
platform.get_view_by_id(locator[:id]) do |device|
|
15
|
-
device.send "is_#{property}"
|
16
|
-
end if locator[:id]
|
17
|
-
|
18
|
-
platform.get_view_by_index(SPINNER_CLASS, locator[:index]) do |device|
|
19
|
-
device.send "is_#{property}"
|
20
|
-
end if locator[:index]
|
21
|
-
|
22
|
-
platform.last_response.body == "true"
|
23
|
-
end
|
24
|
-
end
|
5
|
+
def view_class
|
6
|
+
'android.widget.Spinner'
|
25
7
|
end
|
26
|
-
|
27
8
|
|
28
9
|
end
|
29
10
|
end
|
data/lib/gametel/views/view.rb
CHANGED
@@ -13,19 +13,36 @@ module Gametel
|
|
13
13
|
'android.view.View'
|
14
14
|
end
|
15
15
|
|
16
|
+
def raw_view(&block)
|
17
|
+
get_view_by_id(locator[:id], &block) if locator[:id]
|
18
|
+
get_view_by_index(view_class, locator[:index], &block) if locator[:index]
|
19
|
+
get_view_by_index(locator[:class], locator[:index] || 0, &block) if locator[:class]
|
20
|
+
get_view_by_text(locator[:text], &block) if locator[:text]
|
21
|
+
end
|
22
|
+
|
16
23
|
protected
|
17
24
|
|
18
25
|
def properties
|
19
26
|
[:clickable, :enabled, :focusable, :focused, :selected, :shown]
|
20
27
|
end
|
21
28
|
|
29
|
+
def get_view_by_id(id, &block)
|
30
|
+
platform.get_view_by_id(id, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_view_by_index(clazz, index, &block)
|
34
|
+
platform.get_view_by_index(clazz, index, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_view_by_text(text, &block)
|
38
|
+
raise NotImplementedError
|
39
|
+
end
|
40
|
+
|
22
41
|
def build_property_methods
|
23
42
|
metaclass = class << self; self; end
|
24
43
|
properties.each do |property|
|
25
44
|
metaclass.send(:define_method, "#{property}?".to_sym) do
|
26
|
-
|
27
|
-
platform.get_view_by_id(locator[:id], &query_property) if locator[:id]
|
28
|
-
platform.get_view_by_index(view_class, locator[:index], &query_property) if locator[:index]
|
45
|
+
raw_view {|device| device.send "is_#{property}" }
|
29
46
|
platform.last_response.body == "true"
|
30
47
|
end
|
31
48
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Gametel
|
2
|
+
module Views
|
3
|
+
class WebView < View
|
4
|
+
|
5
|
+
def click(how, what, index=0, scroll=true)
|
6
|
+
platform.click_on_webview(how, what, index, scroll)
|
7
|
+
end
|
8
|
+
|
9
|
+
def enter_text(how, what, text)
|
10
|
+
platform.enter_text_in_webview(how, what, text)
|
11
|
+
end
|
12
|
+
|
13
|
+
def type_text(how, what, text, index=0)
|
14
|
+
find_element_by(how, what) do |device, by|
|
15
|
+
device.type_text_in_web_element(by, text, index, :target => :Robotium)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def clear_text(how, what)
|
20
|
+
platform.clear_text_in_webview(how, what)
|
21
|
+
end
|
22
|
+
|
23
|
+
def wait_for_element(how, what, timeout=20, scroll=true)
|
24
|
+
find_element_by(how, what) do |device, by|
|
25
|
+
device.wait_for_web_element(by, timeout, scroll, :target => :Robotium)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def has_element?(how, what)
|
30
|
+
platform.get_web_views_by(how, what, :target => :Brazenhead)
|
31
|
+
not platform.last_json.empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
def find_element_by(how, what)
|
37
|
+
platform.chain_calls do |device|
|
38
|
+
device.web_view_by(how, what, :variable => '@@by@@', :target => :Brazenhead)
|
39
|
+
yield device, '@@by@@'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'gametel/webviewable'
|
2
|
+
require 'gametel/webview/accessors'
|
3
|
+
|
4
|
+
module Gametel
|
5
|
+
module Webview
|
6
|
+
include Gametel::Webviewable
|
7
|
+
|
8
|
+
def self.included(cls)
|
9
|
+
cls.extend Gametel::Webview::Accessors
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def has_element?(how, what)
|
14
|
+
platform.get_web_views_by(how, what, :target => :Brazenhead)
|
15
|
+
not platform.last_json.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'gametel/views/web_view'
|
2
|
+
|
3
|
+
module Gametel
|
4
|
+
module Webview
|
5
|
+
module Accessors
|
6
|
+
|
7
|
+
def link(name, locator)
|
8
|
+
index = value_or_default(locator, :index, 0)
|
9
|
+
locator = cleanup(locator)
|
10
|
+
define_method name do
|
11
|
+
platform.click_on_webview(locator.first[0], locator.first[1], index)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def text(name, locator)
|
16
|
+
locator = cleanup(locator)
|
17
|
+
define_method "#{name}=" do |text|
|
18
|
+
platform.enter_text_in_webview(locator.first[0], locator.first[1], text)
|
19
|
+
end
|
20
|
+
define_method "clear_#{name}" do
|
21
|
+
platform.clear_text_in_webview(locator.first[0], locator.first[1])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def cleanup(locator)
|
28
|
+
loc = locator.first
|
29
|
+
key = nil
|
30
|
+
case loc[0]
|
31
|
+
when :text
|
32
|
+
locator.delete(:text)
|
33
|
+
key = :textContent
|
34
|
+
when :css
|
35
|
+
locator.delete(:css)
|
36
|
+
key = :cssSelector
|
37
|
+
when :class
|
38
|
+
locator.delete(:class)
|
39
|
+
key = :className
|
40
|
+
when :tag
|
41
|
+
locator.delete(:tag)
|
42
|
+
key = :tagName
|
43
|
+
end
|
44
|
+
locator[key] = loc[1] if key
|
45
|
+
locator
|
46
|
+
end
|
47
|
+
|
48
|
+
def value_or_default(locator, value, default)
|
49
|
+
locator[value] ? locator.delete(value) : default
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Gametel
|
2
|
+
module Webviewable
|
3
|
+
|
4
|
+
attr_reader :platform
|
5
|
+
|
6
|
+
ROBOTIUM_LEFT = 21
|
7
|
+
ROBOTIUM_RIGHT = 22
|
8
|
+
|
9
|
+
|
10
|
+
def initialize(pform = :brazenhead)
|
11
|
+
@platform = Gametel::Platforms::BrazenheadPlatform.new if pform == :brazenhead
|
12
|
+
end
|
13
|
+
|
14
|
+
#
|
15
|
+
# click on the provided text
|
16
|
+
#
|
17
|
+
def click_on_text(text)
|
18
|
+
platform.click_on_text text
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
#
|
23
|
+
# Returns true if the provided text is found on the screen
|
24
|
+
#
|
25
|
+
def has_text?(text)
|
26
|
+
platform.has_text?(text)
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
#
|
31
|
+
# Wait for the provided text to appear
|
32
|
+
#
|
33
|
+
def wait_for_text(text_to_find)
|
34
|
+
platform.wait_for_text(text_to_find)
|
35
|
+
raise "Timed out waiting for the text '#{text_to_find}'" unless platform.last_json
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# scroll down
|
40
|
+
#
|
41
|
+
def scroll_down
|
42
|
+
platform.scroll_down
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# scroll up
|
47
|
+
#
|
48
|
+
def scroll_up
|
49
|
+
platform.scroll_up
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# scroll left
|
54
|
+
#
|
55
|
+
def scroll_left
|
56
|
+
platform.scroll_to_side ROBOTIUM_LEFT
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# scroll right
|
61
|
+
#
|
62
|
+
def scroll_right
|
63
|
+
platform.scroll_to_side ROBOTIUM_RIGHT
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -22,6 +22,7 @@ class AccessorsSampleScreen
|
|
22
22
|
radio_button(:radio_index, :index => 1)
|
23
23
|
view(:view_id, :id => 'some_view_id')
|
24
24
|
view(:view_text, :text => 'Any view text')
|
25
|
+
view(:view_class, :class => 'com.example.views.YourCustomView', :index => 0)
|
25
26
|
spinner(:spinner_id, :id => 'spinner_id')
|
26
27
|
spinner(:spinner_index, :index => 1)
|
27
28
|
progress(:progress_id, :id => 'progress_id')
|
@@ -30,6 +31,15 @@ class AccessorsSampleScreen
|
|
30
31
|
image(:image_id, :id => 'image_id')
|
31
32
|
end
|
32
33
|
|
34
|
+
RSpec::Matchers.define :load_the_class do |class_name|
|
35
|
+
match do |actual|
|
36
|
+
actual.should_receive(:get_class).ordered
|
37
|
+
actual.should_receive(:get_class_loader).with(:variable => '@@loader@@').ordered
|
38
|
+
actual.should_receive(:get_class).ordered
|
39
|
+
actual.should_receive(:for_name).with(class_name, false, '@@loader@@', :variable => '@@the_type@@').ordered
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
33
43
|
describe Gametel::Accessors do
|
34
44
|
context "when using Brazenhead" do
|
35
45
|
let(:screen) { AccessorsSampleScreen.new }
|
@@ -113,8 +123,7 @@ describe Gametel::Accessors do
|
|
113
123
|
end
|
114
124
|
|
115
125
|
it "should know how to get text by index" do
|
116
|
-
accumulator.
|
117
|
-
accumulator.should_receive(:for_name).with('android.widget.EditText', :variable => '@@the_type@@')
|
126
|
+
accumulator.should load_the_class('android.widget.EditText')
|
118
127
|
accumulator.should_receive(:get_view).with('@@the_type@@', 2, :target => 'Robotium', :variable => '@@the_view@@')
|
119
128
|
accumulator.should_receive(:get_text)
|
120
129
|
accumulator.should_receive(:to_string)
|
@@ -464,11 +473,16 @@ describe Gametel::Accessors do
|
|
464
473
|
screen.view_id
|
465
474
|
end
|
466
475
|
|
467
|
-
it "should know how to be clicked by
|
476
|
+
it "should know how to be clicked by text" do
|
468
477
|
platform.should_receive(:click_on_text).with('Any view text')
|
469
478
|
screen.view_text
|
470
479
|
end
|
471
480
|
|
481
|
+
it "should know how to be clicked by class" do
|
482
|
+
platform.should_receive(:click_on_view_by_class).with('com.example.views.YourCustomView', 0)
|
483
|
+
screen.view_class
|
484
|
+
end
|
485
|
+
|
472
486
|
context "when looking at properties" do
|
473
487
|
|
474
488
|
it "should know if they are enabled" do
|
@@ -547,8 +561,7 @@ describe Gametel::Accessors do
|
|
547
561
|
|
548
562
|
context "identified by index" do
|
549
563
|
it "should be able to determine their selected item" do
|
550
|
-
accumulator.
|
551
|
-
accumulator.should_receive(:for_name).with('android.widget.Spinner', anything)
|
564
|
+
accumulator.should load_the_class('android.widget.Spinner')
|
552
565
|
accumulator.should_receive(:get_view).with('@@the_type@@', 1, anything)
|
553
566
|
accumulator.should_receive(:get_selected_item)
|
554
567
|
accumulator.should_receive(:to_string)
|
@@ -663,25 +676,23 @@ describe Gametel::Accessors do
|
|
663
676
|
end
|
664
677
|
|
665
678
|
context "identified by index" do
|
679
|
+
before(:each) do
|
680
|
+
accumulator.should load_the_class('android.widget.ProgressBar')
|
681
|
+
end
|
682
|
+
|
666
683
|
it "should be able to set the progress" do
|
667
|
-
accumulator.should_receive(:get_class)
|
668
|
-
accumulator.should_receive(:for_name).with('android.widget.ProgressBar', :variable => '@@the_type@@')
|
669
684
|
accumulator.should_receive(:get_view).with('@@the_type@@', 1, :target => 'Robotium', :variable => '@@the_view@@')
|
670
685
|
accumulator.should_receive(:set_progress_bar).with('@@the_view@@', 37, :target => 'Robotium')
|
671
686
|
screen.progress_index = 37
|
672
687
|
end
|
673
688
|
|
674
689
|
it "should be able to set the secondary progress" do
|
675
|
-
accumulator.should_receive(:get_class)
|
676
|
-
accumulator.should_receive(:for_name).with('android.widget.ProgressBar', :variable => '@@the_type@@')
|
677
690
|
accumulator.should_receive(:get_view).with('@@the_type@@', 1, :target => 'Robotium', :variable => '@@the_view@@')
|
678
691
|
accumulator.should_receive(:set_secondary_progress).with(74)
|
679
692
|
screen.progress_index_secondary = 74
|
680
693
|
end
|
681
694
|
|
682
695
|
it "should be able to get the progress" do
|
683
|
-
accumulator.should_receive(:get_class)
|
684
|
-
accumulator.should_receive(:for_name).with('android.widget.ProgressBar', :variable => '@@the_type@@')
|
685
696
|
accumulator.should_receive(:get_view).with('@@the_type@@', 1, :target => 'Robotium', :variable => '@@the_view@@')
|
686
697
|
accumulator.should_receive(:get_progress)
|
687
698
|
result.should_receive(:body).and_return("37")
|
@@ -689,8 +700,6 @@ describe Gametel::Accessors do
|
|
689
700
|
end
|
690
701
|
|
691
702
|
it "should be able to get the secondary progress" do
|
692
|
-
accumulator.should_receive(:get_class)
|
693
|
-
accumulator.should_receive(:for_name).with('android.widget.ProgressBar', :variable => '@@the_type@@')
|
694
703
|
accumulator.should_receive(:get_view).with('@@the_type@@', 1, :target => 'Robotium', :variable => '@@the_view@@')
|
695
704
|
accumulator.should_receive(:get_secondary_progress)
|
696
705
|
result.should_receive(:body).and_return("74")
|
@@ -698,8 +707,6 @@ describe Gametel::Accessors do
|
|
698
707
|
end
|
699
708
|
|
700
709
|
it "should be able to get the max" do
|
701
|
-
accumulator.should_receive(:get_class)
|
702
|
-
accumulator.should_receive(:for_name).with('android.widget.ProgressBar', :variable => '@@the_type@@')
|
703
710
|
accumulator.should_receive(:get_view).with('@@the_type@@', 1, :target => 'Robotium', :variable => '@@the_view@@')
|
704
711
|
accumulator.should_receive(:get_max)
|
705
712
|
result.should_receive(:body).and_return("100")
|
data/spec/lib/gametel_spec.rb
CHANGED
@@ -70,16 +70,22 @@ describe Gametel do
|
|
70
70
|
screen.should be_enabled('some_id')
|
71
71
|
end
|
72
72
|
|
73
|
-
it "should know if a view exists" do
|
73
|
+
it "should know if a view exists by id" do
|
74
74
|
result.should_receive(:body).and_return('windowLocation')
|
75
|
-
platform.should_receive(:get_view_by_id).and_return(result)
|
76
|
-
screen.should have_view('some_id')
|
75
|
+
platform.should_receive(:get_view_by_id).with('some_id').and_return(result)
|
76
|
+
screen.should have_view(:id => 'some_id')
|
77
77
|
end
|
78
78
|
|
79
|
-
it "should know if a view
|
79
|
+
it "should know if a view exists by class" do
|
80
|
+
result.should_receive(:body).and_return('windowLocation')
|
81
|
+
platform.should_receive(:get_view_by_index).with('some_class', 0).and_return(result)
|
82
|
+
screen.should have_view(:class => 'some_class', :index => 0)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should know if a view does not exist by id" do
|
80
86
|
result.should_receive(:body).and_return('')
|
81
|
-
platform.should_receive(:get_view_by_id).and_return(result)
|
82
|
-
screen.should_not have_view('some_id')
|
87
|
+
platform.should_receive(:get_view_by_id).with('some_id').and_return(result)
|
88
|
+
screen.should_not have_view(:id => 'some_id')
|
83
89
|
end
|
84
90
|
|
85
91
|
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gametel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.8'
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Jeffrey S. Morgan
|
@@ -9,81 +10,92 @@ authors:
|
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2013-
|
13
|
+
date: 2013-08-23 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: brazenhead
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
17
19
|
requirements:
|
18
20
|
- - ! '>='
|
19
21
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.4.
|
22
|
+
version: 0.4.8
|
21
23
|
type: :runtime
|
22
24
|
prerelease: false
|
23
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
24
27
|
requirements:
|
25
28
|
- - ! '>='
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.4.
|
30
|
+
version: 0.4.8
|
28
31
|
- !ruby/object:Gem::Dependency
|
29
32
|
name: ADB
|
30
33
|
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
31
35
|
requirements:
|
32
36
|
- - ! '>='
|
33
37
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.5.
|
38
|
+
version: 0.5.6
|
35
39
|
type: :runtime
|
36
40
|
prerelease: false
|
37
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
38
43
|
requirements:
|
39
44
|
- - ! '>='
|
40
45
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.5.
|
46
|
+
version: 0.5.6
|
42
47
|
- !ruby/object:Gem::Dependency
|
43
48
|
name: page_navigation
|
44
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
45
51
|
requirements:
|
46
52
|
- - ! '>='
|
47
53
|
- !ruby/object:Gem::Version
|
48
|
-
version: '0.
|
54
|
+
version: '0.9'
|
49
55
|
type: :runtime
|
50
56
|
prerelease: false
|
51
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
52
59
|
requirements:
|
53
60
|
- - ! '>='
|
54
61
|
- !ruby/object:Gem::Version
|
55
|
-
version: '0.
|
62
|
+
version: '0.9'
|
56
63
|
- !ruby/object:Gem::Dependency
|
57
64
|
name: rspec
|
58
65
|
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
59
67
|
requirements:
|
60
68
|
- - ! '>='
|
61
69
|
- !ruby/object:Gem::Version
|
62
|
-
version: 2.
|
70
|
+
version: 2.14.0
|
63
71
|
type: :development
|
64
72
|
prerelease: false
|
65
73
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
66
75
|
requirements:
|
67
76
|
- - ! '>='
|
68
77
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.
|
78
|
+
version: 2.14.0
|
70
79
|
- !ruby/object:Gem::Dependency
|
71
80
|
name: cucumber
|
72
81
|
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
73
83
|
requirements:
|
74
84
|
- - ! '>='
|
75
85
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
86
|
+
version: 1.3.6
|
77
87
|
type: :development
|
78
88
|
prerelease: false
|
79
89
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
80
91
|
requirements:
|
81
92
|
- - ! '>='
|
82
93
|
- !ruby/object:Gem::Version
|
83
|
-
version: 1.
|
94
|
+
version: 1.3.6
|
84
95
|
- !ruby/object:Gem::Dependency
|
85
96
|
name: require_all
|
86
97
|
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
87
99
|
requirements:
|
88
100
|
- - ! '>='
|
89
101
|
- !ruby/object:Gem::Version
|
@@ -91,6 +103,7 @@ dependencies:
|
|
91
103
|
type: :development
|
92
104
|
prerelease: false
|
93
105
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
94
107
|
requirements:
|
95
108
|
- - ! '>='
|
96
109
|
- !ruby/object:Gem::Version
|
@@ -131,9 +144,7 @@ files:
|
|
131
144
|
- features/step_definitions/text_steps.rb
|
132
145
|
- features/step_definitions/view_steps.rb
|
133
146
|
- features/step_definitions/webview_steps.rb
|
134
|
-
- features/support/ApiDemos.apk
|
135
147
|
- features/support/core_ext/string.rb
|
136
|
-
- features/support/debug.keystore
|
137
148
|
- features/support/env.rb
|
138
149
|
- features/support/hooks.rb
|
139
150
|
- features/support/screens/action_bar.rb
|
@@ -150,10 +161,10 @@ files:
|
|
150
161
|
- features/support/screens/image_view_screen.rb
|
151
162
|
- features/support/screens/lists_menu_screen.rb
|
152
163
|
- features/support/screens/main_menu_screen.rb
|
164
|
+
- features/support/screens/midex_webview_screen.rb
|
153
165
|
- features/support/screens/never_will_exist.rb
|
154
166
|
- features/support/screens/seek_bar_screen.rb
|
155
167
|
- features/support/screens/views_menu_screen.rb
|
156
|
-
- features/support/screens/webview_main_screen.rb
|
157
168
|
- features/support/screens/webview_screen.rb
|
158
169
|
- features/text.feature
|
159
170
|
- features/view.feature
|
@@ -170,6 +181,7 @@ files:
|
|
170
181
|
- lib/gametel/platforms/brazenhead/spinner.rb
|
171
182
|
- lib/gametel/platforms/brazenhead/text.rb
|
172
183
|
- lib/gametel/platforms/brazenhead/view.rb
|
184
|
+
- lib/gametel/platforms/brazenhead/webview.rb
|
173
185
|
- lib/gametel/platforms/brazenhead_platform.rb
|
174
186
|
- lib/gametel/version.rb
|
175
187
|
- lib/gametel/views.rb
|
@@ -182,7 +194,11 @@ files:
|
|
182
194
|
- lib/gametel/views/spinner.rb
|
183
195
|
- lib/gametel/views/text.rb
|
184
196
|
- lib/gametel/views/view.rb
|
197
|
+
- lib/gametel/views/web_view.rb
|
185
198
|
- lib/gametel/waiter.rb
|
199
|
+
- lib/gametel/webview.rb
|
200
|
+
- lib/gametel/webview/accessors.rb
|
201
|
+
- lib/gametel/webviewable.rb
|
186
202
|
- spec/lib/gametel/accessors/menu_spec.rb
|
187
203
|
- spec/lib/gametel/accessors/text_spec.rb
|
188
204
|
- spec/lib/gametel/accessors_spec.rb
|
@@ -191,27 +207,35 @@ files:
|
|
191
207
|
- spec/lib/gametel_spec.rb
|
192
208
|
- spec/spec_helper.rb
|
193
209
|
homepage: http://github.com/leandog/gametel
|
194
|
-
licenses:
|
195
|
-
|
210
|
+
licenses:
|
211
|
+
- MIT
|
196
212
|
post_install_message:
|
197
213
|
rdoc_options: []
|
198
214
|
require_paths:
|
199
215
|
- lib
|
200
216
|
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
201
218
|
requirements:
|
202
219
|
- - ! '>='
|
203
220
|
- !ruby/object:Gem::Version
|
204
221
|
version: '0'
|
222
|
+
segments:
|
223
|
+
- 0
|
224
|
+
hash: 2311635935970847416
|
205
225
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
226
|
+
none: false
|
206
227
|
requirements:
|
207
228
|
- - ! '>='
|
208
229
|
- !ruby/object:Gem::Version
|
209
230
|
version: '0'
|
231
|
+
segments:
|
232
|
+
- 0
|
233
|
+
hash: 2311635935970847416
|
210
234
|
requirements: []
|
211
235
|
rubyforge_project:
|
212
|
-
rubygems_version:
|
236
|
+
rubygems_version: 1.8.25
|
213
237
|
signing_key:
|
214
|
-
specification_version:
|
238
|
+
specification_version: 3
|
215
239
|
summary: High level wrapper around android drivers
|
216
240
|
test_files:
|
217
241
|
- features/button.feature
|
@@ -242,9 +266,7 @@ test_files:
|
|
242
266
|
- features/step_definitions/text_steps.rb
|
243
267
|
- features/step_definitions/view_steps.rb
|
244
268
|
- features/step_definitions/webview_steps.rb
|
245
|
-
- features/support/ApiDemos.apk
|
246
269
|
- features/support/core_ext/string.rb
|
247
|
-
- features/support/debug.keystore
|
248
270
|
- features/support/env.rb
|
249
271
|
- features/support/hooks.rb
|
250
272
|
- features/support/screens/action_bar.rb
|
@@ -261,10 +283,10 @@ test_files:
|
|
261
283
|
- features/support/screens/image_view_screen.rb
|
262
284
|
- features/support/screens/lists_menu_screen.rb
|
263
285
|
- features/support/screens/main_menu_screen.rb
|
286
|
+
- features/support/screens/midex_webview_screen.rb
|
264
287
|
- features/support/screens/never_will_exist.rb
|
265
288
|
- features/support/screens/seek_bar_screen.rb
|
266
289
|
- features/support/screens/views_menu_screen.rb
|
267
|
-
- features/support/screens/webview_main_screen.rb
|
268
290
|
- features/support/screens/webview_screen.rb
|
269
291
|
- features/text.feature
|
270
292
|
- features/view.feature
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
NjEzOWQ4NTk3NWFmMDY3NmViMWY2NGI0YmUyZGNiNmEwMjRlNDI5Mg==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MDBhMDBhZjQ5MzZhODQyNzYzNmI2NzdiMGNmMjU5MTk4YTE1NGE3Yg==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NDhhZjlmY2NlYTQ3MDJiMDFlM2I0MGQwODdjNWE0MWE5NDhlNTRjZjNhY2Mx
|
10
|
-
OTFmZGY2NTVkZjcyODUwZDQ3YzQ5ODRhNjI3MTUwODdjMDk2ZDhkZjA4NzE2
|
11
|
-
ZDRkNTg3NDg2M2RjOWRiM2IxY2VhNGNlMTJkNzdlMTFmYzJmMjQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
OTM4YTMzMjNjODhmNzdkMDEwOThmODIxM2QyYjJiMTk4ZWY5MTdkNWUwMTNl
|
14
|
-
NjUwY2Q5Y2UwNzU2YTBhMTQ5ZGRiNDJjNmU1YzY3NGM2OWNhZjc5NjQ0MmU4
|
15
|
-
NjY0ODZmOTk4Y2FmMGQxOTkzMTU2OTRhYTBlOGExZWNlZmYyODE=
|
Binary file
|
Binary file
|