symbiont 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile.lock +9 -8
- data/HISTORY.md +6 -0
- data/lib/symbiont.rb +6 -0
- data/lib/symbiont/enclosers.rb +19 -3
- data/lib/symbiont/evaluators.rb +4 -1
- data/lib/symbiont/platform_watir/platform_object.rb +10 -2
- data/lib/symbiont/version.rb +1 -1
- data/lib/symbiont/web_objects/_common.rb +17 -1
- data/lib/symbiont/web_objects/checkbox.rb +13 -1
- data/spec/symbiont/enclosers_spec.rb +13 -1
- data/spec/symbiont/evaluators_spec.rb +3 -3
- data/spec/symbiont/symbiont_spec.rb +10 -0
- data/spec/symbiont/web_object_spec.rb +26 -6
- data/spec/symbiont/web_objects/checkbox_spec.rb +16 -0
- metadata +2 -2
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,27 +1,28 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
symbiont (0.1.
|
4
|
+
symbiont (0.1.6)
|
5
5
|
watir-webdriver (= 0.6.1)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
addressable (2.2
|
10
|
+
addressable (2.3.2)
|
11
11
|
builder (3.0.0)
|
12
|
-
childprocess (0.3.
|
13
|
-
ffi (~> 1.0.6)
|
12
|
+
childprocess (0.3.5)
|
13
|
+
ffi (~> 1.0, >= 1.0.6)
|
14
14
|
cucumber (1.2.1)
|
15
15
|
builder (>= 2.1.2)
|
16
16
|
diff-lcs (>= 1.1.3)
|
17
17
|
gherkin (~> 2.11.0)
|
18
18
|
json (>= 1.4.6)
|
19
19
|
diff-lcs (1.1.3)
|
20
|
-
ffi (1.
|
20
|
+
ffi (1.1.5)
|
21
|
+
ffi (1.1.5-x86-mingw32)
|
21
22
|
gherkin (2.11.1-x86-mingw32)
|
22
23
|
json (>= 1.4.6)
|
23
24
|
json (1.7.3)
|
24
|
-
libwebsocket (0.1.
|
25
|
+
libwebsocket (0.1.5)
|
25
26
|
addressable
|
26
27
|
multi_json (1.3.5)
|
27
28
|
rspec (2.11.0)
|
@@ -32,8 +33,8 @@ GEM
|
|
32
33
|
rspec-expectations (2.11.1)
|
33
34
|
diff-lcs (~> 1.1.3)
|
34
35
|
rspec-mocks (2.11.1)
|
35
|
-
rubyzip (0.9.
|
36
|
-
selenium-webdriver (2.
|
36
|
+
rubyzip (0.9.9)
|
37
|
+
selenium-webdriver (2.25.0)
|
37
38
|
childprocess (>= 0.2.5)
|
38
39
|
libwebsocket (~> 0.1.3)
|
39
40
|
multi_json (~> 1.0)
|
data/HISTORY.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
Change Log and History
|
2
2
|
======================
|
3
3
|
|
4
|
+
Version 0.1.7 / 2012-10-16
|
5
|
+
--------------------------
|
6
|
+
|
7
|
+
This release allows common Watir-type method calls to be callable on web objects directly. For example, you can now call 'id', 'value' and so on directly on the web objects. For a checkbox, you can directly call 'check' and 'uncheck'. This is as opposed to before where you had to use Symbiont's generated method structure, such as 'check_myCheckbox' (where myCheckbox was a declared checkbox web object). The other main element that was added was an encloser (within_window) that will allow you to essentially "attach" to a browser window and provide a set of actions in the context of that window.
|
8
|
+
|
9
|
+
|
4
10
|
Version 0.1.6 / 2012-09-30
|
5
11
|
--------------------------
|
6
12
|
|
data/lib/symbiont.rb
CHANGED
@@ -35,6 +35,12 @@ module Symbiont
|
|
35
35
|
caller.extend Symbiont::Enclosers
|
36
36
|
end
|
37
37
|
|
38
|
+
# Returns the default wait value for pages. This value is the default
|
39
|
+
# value beyond which a timeout is assumed.
|
40
|
+
def self.page_level_wait
|
41
|
+
@page_wait ||= 15
|
42
|
+
end
|
43
|
+
|
38
44
|
# The initialize method will be invoked when a page definition includes
|
39
45
|
# Symbiont. Some key things are happening here that are critical to
|
40
46
|
# Symbiont working correctly:
|
data/lib/symbiont/enclosers.rb
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
module Symbiont
|
2
2
|
module Enclosers
|
3
|
-
|
3
|
+
|
4
|
+
# Used to identify a web object or action on a web object as existing
|
5
|
+
# within an enclosing window object. The window can be referenced using
|
6
|
+
# either the title attribute of the window or a direct URL. The URL does
|
7
|
+
# not have to be the entire URL; it can just be a page name.
|
8
|
+
#
|
9
|
+
# @param [Hash] locator the :title or :url of the window
|
10
|
+
# @param [Proc; optional] block any code that should be executed as an
|
11
|
+
# action on or within the window
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# page.within_window(title: "Report Page")
|
15
|
+
# page.within_window(url: report.html)
|
16
|
+
def within_window(locator, &block)
|
17
|
+
@platform.within_window(locator, &block)
|
18
|
+
end
|
19
|
+
|
4
20
|
# Used to identify a web object as existing within an enclosing object
|
5
21
|
# like a frame or an iframe. It is possible to nest by passing in parent
|
6
22
|
# enclosers as the second parameter.
|
@@ -35,8 +51,8 @@ module Symbiont
|
|
35
51
|
# @page.wait_for(5, 'page with expected title not found') do
|
36
52
|
# @page.title.should == "Test App"
|
37
53
|
# end
|
38
|
-
def wait_for(
|
39
|
-
@platform.wait_for(
|
54
|
+
def wait_for(timeout=Symbiont.page_level_wait, message=nil, &block)
|
55
|
+
@platform.wait_for(timeout, message, &block)
|
40
56
|
end
|
41
57
|
|
42
58
|
# Provides a context for an action that will generate a JavaScript alert
|
data/lib/symbiont/evaluators.rb
CHANGED
@@ -59,7 +59,10 @@ module Symbiont
|
|
59
59
|
def wait_for_pending_requests(timeout=30, message=nil)
|
60
60
|
end_time = ::Time.now + timeout
|
61
61
|
until ::Time.now > end_time
|
62
|
-
|
62
|
+
begin
|
63
|
+
return if @browser.execute_script('return jQuery.active') == 0
|
64
|
+
rescue ReferenceError
|
65
|
+
end
|
63
66
|
sleep 0.5
|
64
67
|
end
|
65
68
|
message = "Pending requests never indicated completion" unless message
|
@@ -67,10 +67,18 @@ module Symbiont
|
|
67
67
|
|
68
68
|
# Platform method to wait for an action to complete in a given time.
|
69
69
|
# @see Symbiont::Enclosers#wait_for
|
70
|
-
def wait_for(message="wait condition not found",
|
70
|
+
def wait_for(timeout, message="wait condition not found", &block)
|
71
71
|
@browser.wait_until(timeout, message, &block)
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
|
+
# Platform method to reference web objects in the context of a
|
75
|
+
# window.
|
76
|
+
# @see Symbiont::Enclosers#within_window
|
77
|
+
def within_window(locator, &block)
|
78
|
+
identifier = {locator.keys.first => /#{Regexp.escape(locator.values.first)}/}
|
79
|
+
@browser.window(identifier).use(&block)
|
80
|
+
end
|
81
|
+
|
74
82
|
# Platform method to handle an alert message box.
|
75
83
|
# @see Symbiont::Enclosers#will_alert
|
76
84
|
def will_alert(&block)
|
data/lib/symbiont/version.rb
CHANGED
@@ -24,7 +24,7 @@ module Symbiont
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def visible?
|
27
|
-
@web_object.
|
27
|
+
@web_object.present?
|
28
28
|
end
|
29
29
|
|
30
30
|
def text
|
@@ -51,6 +51,22 @@ module Symbiont
|
|
51
51
|
@web_object.tag_name
|
52
52
|
end
|
53
53
|
|
54
|
+
def id
|
55
|
+
@web_object.id
|
56
|
+
end
|
57
|
+
|
58
|
+
def value
|
59
|
+
@web_object.value
|
60
|
+
end
|
61
|
+
|
62
|
+
def inspect
|
63
|
+
@web_object.inspect
|
64
|
+
end
|
65
|
+
|
66
|
+
def flash
|
67
|
+
@web_object.flash
|
68
|
+
end
|
69
|
+
|
54
70
|
def when_actionable(timeout=5)
|
55
71
|
@web_object.wait_until_present(timeout)
|
56
72
|
self
|
@@ -2,7 +2,19 @@ module Symbiont
|
|
2
2
|
module WebObjects
|
3
3
|
|
4
4
|
class CheckBox < WebObject
|
5
|
-
|
5
|
+
|
6
|
+
def check
|
7
|
+
@web_object.set
|
8
|
+
end
|
9
|
+
|
10
|
+
def uncheck
|
11
|
+
@web_object.clear
|
12
|
+
end
|
13
|
+
|
14
|
+
def checked?
|
15
|
+
@web_object.set?
|
16
|
+
end
|
17
|
+
|
6
18
|
end # class: CheckBox
|
7
19
|
|
8
20
|
::Symbiont::WebObjects.class_for_type[:checkbox] = ::Symbiont::WebObjects::CheckBox
|
@@ -15,7 +15,7 @@ describe Symbiont::Enclosers do
|
|
15
15
|
|
16
16
|
it "should wait for a condition to be true" do
|
17
17
|
watir_browser.should_receive(:wait_until).with(5, "some condition")
|
18
|
-
watir_definition.wait_for("some condition"
|
18
|
+
watir_definition.wait_for(5, "some condition")
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should handle alert message boxes" do
|
@@ -38,5 +38,17 @@ describe Symbiont::Enclosers do
|
|
38
38
|
watir_definition.will_prompt("Question") do
|
39
39
|
end
|
40
40
|
end
|
41
|
+
|
42
|
+
it "attaches to a window by using the title" do
|
43
|
+
watir_browser.should_receive(:window).with(:title => /Display\ Results/).and_return(watir_browser)
|
44
|
+
watir_browser.should_receive(:use)
|
45
|
+
watir_definition.within_window(title: "Display Results")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "attaches to a window by using the url" do
|
49
|
+
watir_browser.should_receive(:window).with(:url => /results\.html/).and_return(watir_browser)
|
50
|
+
watir_browser.should_receive(:use)
|
51
|
+
watir_definition.within_window(url: "results.html")
|
52
|
+
end
|
41
53
|
end
|
42
54
|
end
|
@@ -56,13 +56,13 @@ describe Symbiont::Enclosers do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should wait for jquery pending requests to finish" do
|
59
|
-
watir_browser.should_receive(:
|
59
|
+
watir_browser.should_receive(:execute_script).with('return jQuery.active').and_return(0)
|
60
60
|
watir_definition.wait_for_pending_requests
|
61
61
|
end
|
62
62
|
|
63
63
|
it "should return an exception if pending requests did not finish" do
|
64
|
-
watir_browser.should_receive(:
|
65
|
-
watir_browser.should_receive(:
|
64
|
+
watir_browser.should_receive(:execute_script).with('return jQuery.active')
|
65
|
+
watir_browser.should_receive(:execute_script).with('return jQuery.active').and_return(1)
|
66
66
|
expect { watir_definition.wait_for_pending_requests(1) }.to raise_error
|
67
67
|
end
|
68
68
|
end
|
@@ -4,4 +4,14 @@ describe Symbiont do
|
|
4
4
|
it "should return version information" do
|
5
5
|
Symbiont.version.should == "Symbiont v#{Symbiont::VERSION}"
|
6
6
|
end
|
7
|
+
|
8
|
+
it "should provide a page level wait default" do
|
9
|
+
Symbiont.instance_variable_set("@page_wait", 10)
|
10
|
+
Symbiont.page_level_wait.should == 10
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should set the page level wait default to 15" do
|
14
|
+
Symbiont.instance_variable_set("@page_wait", nil)
|
15
|
+
Symbiont.page_level_wait.should == 15
|
16
|
+
end
|
7
17
|
end
|
@@ -27,6 +27,26 @@ describe "Web Objects" do
|
|
27
27
|
watir_definition.tag.should == "div"
|
28
28
|
end
|
29
29
|
|
30
|
+
it "should retrieve the id of a web object" do
|
31
|
+
watir_browser.should_receive(:id).and_return("id")
|
32
|
+
watir_definition.id.should == "id"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should retrieve the value of a web object" do
|
36
|
+
watir_browser.should_receive(:value).and_return("value")
|
37
|
+
watir_definition.value.should == "value"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should be able to inspect a web object" do
|
41
|
+
watir_browser.should_receive(:inspect).and_return(watir_definition)
|
42
|
+
watir_definition.inspect.should be_instance_of Symbiont::WebObjects::WebObject
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be able to flash a web_object" do
|
46
|
+
watir_browser.should_receive(:flash).and_return(watir_definition)
|
47
|
+
watir_definition.flash.should be_instance_of Symbiont::WebObjects::WebObject
|
48
|
+
end
|
49
|
+
|
30
50
|
it "should determine if a web object is enabled" do
|
31
51
|
watir_browser.should_receive(:enabled?).and_return(true)
|
32
52
|
watir_definition.enabled?.should == true
|
@@ -48,12 +68,12 @@ describe "Web Objects" do
|
|
48
68
|
end
|
49
69
|
|
50
70
|
it "should determine if a web object is visible" do
|
51
|
-
watir_browser.should_receive(:
|
71
|
+
watir_browser.should_receive(:present?).and_return(true)
|
52
72
|
watir_definition.visible?.should == true
|
53
73
|
end
|
54
74
|
|
55
75
|
it "should determine if a web object is not visible" do
|
56
|
-
watir_browser.should_receive(:
|
76
|
+
watir_browser.should_receive(:present?).and_return(false)
|
57
77
|
watir_definition.visible?.should == false
|
58
78
|
end
|
59
79
|
|
@@ -85,23 +105,23 @@ describe "Web Objects" do
|
|
85
105
|
end
|
86
106
|
|
87
107
|
it "should wait for a web object to become visible" do
|
88
|
-
watir_browser.should_receive(:
|
108
|
+
watir_browser.should_receive(:present?).and_return(true)
|
89
109
|
watir_definition.when_visible(5)
|
90
110
|
end
|
91
111
|
|
92
112
|
it "should reference a web object when it is visible" do
|
93
|
-
watir_browser.should_receive(:
|
113
|
+
watir_browser.should_receive(:present?).and_return(true)
|
94
114
|
web_object = watir_definition.when_visible(5)
|
95
115
|
web_object.should === watir_definition
|
96
116
|
end
|
97
117
|
|
98
118
|
it "should wait for a web object to become invisible" do
|
99
|
-
watir_browser.should_receive(:
|
119
|
+
watir_browser.should_receive(:present?).and_return(false)
|
100
120
|
watir_definition.when_not_visible(5)
|
101
121
|
end
|
102
122
|
|
103
123
|
it "should reference a web object when it is not visible" do
|
104
|
-
watir_browser.stub(:
|
124
|
+
watir_browser.stub(:present?).and_return(false)
|
105
125
|
web_object = watir_definition.when_not_visible(5)
|
106
126
|
web_object.should === watir_definition
|
107
127
|
end
|
@@ -3,9 +3,25 @@ require 'spec_helper'
|
|
3
3
|
describe Symbiont::WebObjects::CheckBox do
|
4
4
|
describe "implementation" do
|
5
5
|
let(:checkbox_object) { double('checkbox_object') }
|
6
|
+
let(:checkbox_definition) { Symbiont::WebObjects::CheckBox.new(checkbox_object) }
|
6
7
|
|
7
8
|
it "should register with a submit type" do
|
8
9
|
::Symbiont::WebObjects.get_class_for(:input, :checkbox).should == ::Symbiont::WebObjects::CheckBox
|
9
10
|
end
|
11
|
+
|
12
|
+
it "should be able to check the definition" do
|
13
|
+
checkbox_object.should_receive(:set)
|
14
|
+
checkbox_definition.check
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be able to uncheck the definition" do
|
18
|
+
checkbox_object.should_receive(:clear)
|
19
|
+
checkbox_definition.uncheck
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be able to determine if the definition is checked" do
|
23
|
+
checkbox_object.should_receive(:set?).and_return(true)
|
24
|
+
checkbox_definition.checked?
|
25
|
+
end
|
10
26
|
end
|
11
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: symbiont
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
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: 2012-
|
12
|
+
date: 2012-10-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|