symbiont 0.4.0 → 0.5.0
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.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/Rakefile +0 -1
- data/lib/symbiont/elements.rb +40 -3
- data/lib/symbiont/factory.rb +14 -11
- data/lib/symbiont/pages.rb +6 -0
- data/lib/symbiont/version.rb +1 -1
- data/lib/symbiont.rb +7 -1
- data/spec/fixtures/element_definitions.rb +16 -0
- data/spec/fixtures/mock_drivers.rb +2 -2
- data/spec/fixtures/page_definitions.rb +2 -2
- data/spec/symbiont/driver_spec.rb +20 -9
- data/spec/symbiont/element_spec.rb +2 -1
- data/spec/symbiont/factory_spec.rb +23 -23
- data/spec/symbiont/page_spec.rb +31 -25
- data/symbiont.gemspec +1 -1
- data/test/symbiont-script.rb +25 -19
- metadata +6 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40e70be6d5318a81169b82ff6883cb2c11326241
|
4
|
+
data.tar.gz: fc9316c0a36b95ffc727d4c3910a02e2d1ba2671
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 633679d53faa74a76051840a800b94ae380a80282b9870d73bb5ae02f5154d8ecadfe7fbabdf022ce1f27b1dc59d9cac7326f2bb4f51ed1cbd8e92fa3acc6db3
|
7
|
+
data.tar.gz: 577844356cd9cf54fbf29f60d3884716f23c3da2379c1006ac5cb25e87d03fbf8ee8dd0263a9cb668f4ca5d13d75263b51adf61fa9ea5a4d64a98468a1cab08e
|
data/README.md
CHANGED
@@ -28,7 +28,9 @@ You can also install Symbiont just as you would any other gem:
|
|
28
28
|
|
29
29
|
## Usage
|
30
30
|
|
31
|
-
|
31
|
+
To learn how to use the framework, you can check out my [blog posts on Symbiont](http://testerstories.com/category/symbiont/).
|
32
|
+
|
33
|
+
You can check out the [Symbiont test script](https://github.com/jnyman/symbiont/blob/master/test/symbiont-script.rb) for an idea of how the library can be interacted with. Do note that the test script requires a local copy of [Dialogic](https://github.com/jnyman/dialogic) to be running. To execute the test script:
|
32
34
|
|
33
35
|
$ rake test:script
|
34
36
|
|
data/Rakefile
CHANGED
@@ -19,7 +19,6 @@ namespace :spec do
|
|
19
19
|
options = %w(--color)
|
20
20
|
options += %w(--format documentation)
|
21
21
|
options += %w(--format html --out spec/reports/symbiont-test-report.html)
|
22
|
-
options += %w(--format nested --out spec/reports/symbiont-test-report.txt)
|
23
22
|
|
24
23
|
config.rspec_opts = options
|
25
24
|
end
|
data/lib/symbiont/elements.rb
CHANGED
@@ -11,13 +11,21 @@ module Symbiont
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.settable
|
14
|
-
@settable ||= [:text_field]
|
14
|
+
@settable ||= [:text_field, :file_field, :textarea]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.selectable
|
18
|
+
@selectable ||= [:select_list]
|
15
19
|
end
|
16
20
|
|
17
21
|
def self.settable?(element)
|
18
22
|
settable.include? element.to_sym
|
19
23
|
end
|
20
24
|
|
25
|
+
def self.selectable?(element)
|
26
|
+
selectable.include? element.to_sym
|
27
|
+
end
|
28
|
+
|
21
29
|
module Element
|
22
30
|
# Iterates through Watir factory methods. Each method is defined
|
23
31
|
# as a method that can be called on a page class. This is what
|
@@ -28,6 +36,7 @@ module Symbiont
|
|
28
36
|
context = context_from_signature(locator, &block)
|
29
37
|
define_element_accessor(identifier, locator, element, &context)
|
30
38
|
define_set_accessor(identifier, locator, element, &context) if Symbiont.settable?(element)
|
39
|
+
define_select_accessor(identifier, locator, element, &context) if Symbiont.selectable?(element)
|
31
40
|
end
|
32
41
|
end
|
33
42
|
|
@@ -104,8 +113,6 @@ module Symbiont
|
|
104
113
|
# handled by define_element_accessor instead.
|
105
114
|
def define_set_accessor(identifier, locator, element, &block)
|
106
115
|
define_method "#{identifier}=".to_sym do |*values|
|
107
|
-
puts "*** *values: #{values}"
|
108
|
-
|
109
116
|
accessor = if block_given?
|
110
117
|
instance_exec(&block)
|
111
118
|
else
|
@@ -120,6 +127,36 @@ module Symbiont
|
|
120
127
|
end
|
121
128
|
end
|
122
129
|
|
130
|
+
# Defines an accessor method for an element that allows the value of
|
131
|
+
# the element to be selected via appending an "=" to the friendly
|
132
|
+
# name (identifier) of the element passed in.
|
133
|
+
#
|
134
|
+
# @param identifier [Symbol] friendly name of element definition
|
135
|
+
# @param locator [Hash] locators for referencing the element
|
136
|
+
# @param element [Symbol] name of Watir-based object
|
137
|
+
# @param block [Proc] a context block
|
138
|
+
#
|
139
|
+
# @example
|
140
|
+
# This element definition:
|
141
|
+
# select_list :city, id: 'city'
|
142
|
+
#
|
143
|
+
# Can be accessed in two ways:
|
144
|
+
# @page.city.select 'Chicago'
|
145
|
+
# @page.city = 'Chicago'
|
146
|
+
#
|
147
|
+
# The second approach would lead to the *values variable having
|
148
|
+
# an array like this: ['City']. The first approach would be
|
149
|
+
# handled by define_element_accessor instead.
|
150
|
+
def define_select_accessor(identifier, locator, element, &block)
|
151
|
+
define_method "#{identifier}=".to_sym do |*values|
|
152
|
+
if block_given?
|
153
|
+
instance_exec(&block).select *values
|
154
|
+
else
|
155
|
+
reference_element(element, locator).select *values
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
123
160
|
# Returns the identifier and locator portions of an element definition.
|
124
161
|
#
|
125
162
|
# @param signature [Array] full element definition
|
data/lib/symbiont/factory.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Symbiont
|
2
2
|
module Factory
|
3
|
-
|
4
3
|
# Creates a definition context for actions. If an existing context
|
5
4
|
# exists, that context will be re-used.
|
6
5
|
#
|
@@ -9,9 +8,9 @@ module Symbiont
|
|
9
8
|
# @param block [Proc] logic to execute in the context of the definition
|
10
9
|
# @return [Object] instance of the definition
|
11
10
|
def on(definition, visit=false, &block)
|
12
|
-
if @
|
13
|
-
block.call @
|
14
|
-
return @
|
11
|
+
if @page.kind_of?(definition)
|
12
|
+
block.call @page if block
|
13
|
+
return @page
|
15
14
|
end
|
16
15
|
|
17
16
|
if @context.kind_of?(definition)
|
@@ -19,11 +18,15 @@ module Symbiont
|
|
19
18
|
return @context
|
20
19
|
end
|
21
20
|
|
22
|
-
@
|
23
|
-
@
|
24
|
-
|
21
|
+
@page = definition.new(@driver)
|
22
|
+
@page.view if visit == true
|
23
|
+
|
24
|
+
@page.has_correct_url? if @page.respond_to?(:url_matches)
|
25
|
+
@page.has_correct_title? if @page.respond_to?(:title_is)
|
26
|
+
|
27
|
+
block.call @page if block
|
25
28
|
|
26
|
-
@
|
29
|
+
@page
|
27
30
|
end
|
28
31
|
|
29
32
|
alias_method :on_page, :on
|
@@ -49,7 +52,7 @@ module Symbiont
|
|
49
52
|
# @param block [Proc] logic to execute in the context of the definition
|
50
53
|
# @return [Object] instance of the definition
|
51
54
|
def on_new(definition, &block)
|
52
|
-
@
|
55
|
+
@page = nil
|
53
56
|
|
54
57
|
if @context.kind_of?(definition)
|
55
58
|
@context = nil
|
@@ -68,8 +71,8 @@ module Symbiont
|
|
68
71
|
# @return [Object] instance of the definition
|
69
72
|
def on_set(definition, &block)
|
70
73
|
on(definition, &block)
|
71
|
-
@context = @
|
72
|
-
@
|
74
|
+
@context = @page
|
75
|
+
@page
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
data/lib/symbiont/pages.rb
CHANGED
@@ -5,6 +5,7 @@ module Symbiont
|
|
5
5
|
def view
|
6
6
|
no_url_is_provided if asserted_url.nil?
|
7
7
|
driver.goto(asserted_url)
|
8
|
+
self
|
8
9
|
end
|
9
10
|
|
10
11
|
def has_correct_url?
|
@@ -17,6 +18,11 @@ module Symbiont
|
|
17
18
|
!(driver.title.match(asserted_title)).nil?
|
18
19
|
end
|
19
20
|
|
21
|
+
def verified?
|
22
|
+
has_correct_url?
|
23
|
+
has_correct_title?
|
24
|
+
end
|
25
|
+
|
20
26
|
def asserted_url
|
21
27
|
self.class.asserted_url
|
22
28
|
end
|
data/lib/symbiont/version.rb
CHANGED
data/lib/symbiont.rb
CHANGED
@@ -41,7 +41,7 @@ module Symbiont
|
|
41
41
|
|
42
42
|
# @param driver [Object] a tool driver instance
|
43
43
|
def initialize(driver)
|
44
|
-
Symbiont.trace("
|
44
|
+
Symbiont.trace("Symbiont attached to driver:\n\t#{driver.inspect}")
|
45
45
|
@driver = driver
|
46
46
|
|
47
47
|
initialize_page if respond_to?(:initialize_page)
|
@@ -52,3 +52,9 @@ end
|
|
52
52
|
def attach(mod=Symbiont)
|
53
53
|
include mod
|
54
54
|
end
|
55
|
+
|
56
|
+
def symbiont_browser(browser=:firefox)
|
57
|
+
@driver = Watir::Browser.new browser
|
58
|
+
end
|
59
|
+
|
60
|
+
alias :symbiont_browser_for :symbiont_browser
|
@@ -53,3 +53,19 @@ shared_examples_for 'element set generator for' do |elements|
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
shared_examples_for 'element select generator for' do |elements|
|
58
|
+
elements.each do |element|
|
59
|
+
it "will set a value on a specific #{element} with a single locator" do
|
60
|
+
expect(watir_browser).to receive(element).with(id: element).and_return(watir_element)
|
61
|
+
expect(watir_element).to receive(:select).with('value')
|
62
|
+
watir_definition.send "#{element}=", 'value'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "will set a value on a specific #{element} with a proc" do
|
66
|
+
expect(watir_browser).to receive(element).with(id: element).and_return(watir_element)
|
67
|
+
expect(watir_element).to receive(:select).with('value')
|
68
|
+
watir_definition.send "#{element}_proc=", 'value'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -2,7 +2,7 @@ require 'watir-webdriver'
|
|
2
2
|
|
3
3
|
def mock_browser_for_watir
|
4
4
|
watir_browser = double('watir')
|
5
|
-
watir_browser.
|
6
|
-
watir_browser.
|
5
|
+
allow(watir_browser).to receive(:is_a?).with(Watir::Browser).and_return(true)
|
6
|
+
allow(watir_browser).to receive(:is_a?).with(Selenium::WebDriver::Driver).and_return(false)
|
7
7
|
watir_browser
|
8
8
|
end
|
@@ -5,7 +5,7 @@ end
|
|
5
5
|
class TestFactory
|
6
6
|
include Symbiont::Factory
|
7
7
|
attr_accessor :driver
|
8
|
-
attr_accessor :
|
8
|
+
attr_accessor :page
|
9
9
|
end
|
10
10
|
|
11
11
|
class ValidPageNewContext
|
@@ -19,7 +19,7 @@ class ValidPage
|
|
19
19
|
url_matches /:\d{4}/
|
20
20
|
title_is 'Dialogic'
|
21
21
|
|
22
|
-
%w(text_field button).each do |element|
|
22
|
+
%w(text_field button file_field textarea select_list).each do |element|
|
23
23
|
send element, :"#{element}", id: element
|
24
24
|
|
25
25
|
send element, :"#{element}_proc", proc { driver.send(element, id: element) }
|
@@ -1,12 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
describe 'Symbiont Driver' do
|
4
|
+
include_context :page
|
5
|
+
|
6
|
+
context 'a symbiont driver is requested' do
|
7
|
+
it 'will provide the default browser' do
|
8
|
+
expect(Watir::Browser).to receive(:new).once.and_return(watir_browser)
|
9
|
+
symbiont_browser
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
3
14
|
describe 'Page Definitions' do
|
4
15
|
include_context :page
|
5
16
|
|
6
17
|
context 'a definition using watir-webdriver' do
|
7
18
|
context 'with a url_is assertion' do
|
8
19
|
it 'will call the driver navigation method when viewed' do
|
9
|
-
watir_browser.
|
20
|
+
expect(watir_browser).to receive(:goto).twice
|
10
21
|
expect { watir_definition.view }.not_to raise_error
|
11
22
|
watir_definition.view
|
12
23
|
end
|
@@ -14,27 +25,27 @@ describe 'Page Definitions' do
|
|
14
25
|
|
15
26
|
context 'with a url_matches assertion' do
|
16
27
|
it 'will verify a url if the url_matches assertion has been set' do
|
17
|
-
watir_browser.
|
28
|
+
expect(watir_browser).to receive(:url).twice.and_return('http://localhost:9292')
|
18
29
|
expect { watir_definition.has_correct_url? }.not_to raise_error
|
19
|
-
watir_definition.has_correct_url
|
30
|
+
expect(watir_definition.has_correct_url?).to be_truthy
|
20
31
|
end
|
21
32
|
|
22
33
|
it 'will not verify a url if the url does not match the url_matches assertion' do
|
23
|
-
watir_browser.
|
24
|
-
watir_definition.has_correct_url
|
34
|
+
expect(watir_browser).to receive(:url).and_return('http://127.0.0.1')
|
35
|
+
expect(watir_definition.has_correct_url?).to be_falsey
|
25
36
|
end
|
26
37
|
end
|
27
38
|
|
28
39
|
context 'with a title_is assertion' do
|
29
40
|
it 'will verify a title if the title_is assertion has been set' do
|
30
|
-
watir_browser.
|
41
|
+
expect(watir_browser).to receive(:title).twice.and_return 'Dialogic'
|
31
42
|
expect { watir_definition.has_correct_title? }.not_to raise_error
|
32
|
-
watir_definition.has_correct_title
|
43
|
+
expect(watir_definition.has_correct_title?).to be_truthy
|
33
44
|
end
|
34
45
|
|
35
46
|
it 'will not verify a title if the title does not match the title_is assertion' do
|
36
|
-
watir_browser.
|
37
|
-
watir_definition.has_correct_title
|
47
|
+
expect(watir_browser).to receive(:title).and_return('Page Title')
|
48
|
+
expect(watir_definition.has_correct_title?).to be_falsey
|
38
49
|
end
|
39
50
|
end
|
40
51
|
end
|
@@ -5,5 +5,6 @@ describe Symbiont::Element do
|
|
5
5
|
include_context :element
|
6
6
|
|
7
7
|
provides_an 'element generator for', %w{text_field button}
|
8
|
-
provides_an 'element set generator for', %w{text_field}
|
8
|
+
provides_an 'element set generator for', %w{text_field file_field textarea}
|
9
|
+
provides_an 'element select generator for', %w{select_list}
|
9
10
|
end
|
@@ -7,63 +7,63 @@ describe Symbiont::Factory do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'will create a new definition and view it, using on_view' do
|
10
|
-
@factory.driver.
|
10
|
+
expect(@factory.driver).to receive(:goto)
|
11
11
|
@factory.on_view(ValidPage)
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'will create a new definition and view it, using on_view and a block' do
|
15
|
-
@factory.driver.
|
15
|
+
expect(@factory.driver).to receive(:goto)
|
16
16
|
@factory.on_view ValidPage do |page|
|
17
|
-
page.
|
17
|
+
expect(page).to be_instance_of ValidPage
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'will create a new definition, using on and a block with a parameter' do
|
22
|
-
@factory.driver.
|
22
|
+
expect(@factory.driver).not_to receive(:goto)
|
23
23
|
@factory.on ValidPage do |page|
|
24
|
-
page.
|
24
|
+
expect(page).to be_instance_of ValidPage
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'will create a new definition, using on and a block without a parameter' do
|
29
|
-
@factory.driver.
|
29
|
+
expect(@factory.driver).not_to receive(:goto)
|
30
30
|
@factory.on ValidPage do
|
31
|
-
@factory.
|
31
|
+
expect(@factory.page).to be_instance_of ValidPage
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'will use an existing object reference with on' do
|
36
|
-
@factory.driver.
|
36
|
+
expect(@factory.driver).to receive(:goto)
|
37
37
|
obj1 = @factory.on_view ValidPage
|
38
38
|
obj2 = @factory.on ValidPage
|
39
|
-
obj1.
|
39
|
+
expect(obj1).to be(obj2)
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'will not use an existing object reference with on_new' do
|
43
|
-
@factory.driver.
|
43
|
+
expect(@factory.driver).to receive(:goto)
|
44
44
|
obj1 = @factory.on_view ValidPage
|
45
45
|
obj2 = @factory.on_new ValidPage
|
46
|
-
obj1.
|
46
|
+
expect(obj1).not_to be(obj2)
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'will create a new definition, using on_set' do
|
50
|
-
@factory.driver.
|
50
|
+
expect(@factory.driver).not_to receive(:goto)
|
51
51
|
@factory.on_set ValidPage do |page|
|
52
|
-
page.
|
52
|
+
expect(page).to be_instance_of ValidPage
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'will set a reference to be used outside the factory' do
|
57
|
-
|
58
|
-
current = @factory.instance_variable_get '@
|
59
|
-
current.
|
57
|
+
page = @factory.on ValidPage
|
58
|
+
current = @factory.instance_variable_get '@page'
|
59
|
+
expect(current).to be(page)
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'will use an existing object reference with on_set' do
|
63
|
-
@factory.driver.
|
63
|
+
expect(@factory.driver).to receive(:goto)
|
64
64
|
obj1 = @factory.on_view ValidPage
|
65
65
|
obj2 = @factory.on_set ValidPage
|
66
|
-
obj1.
|
66
|
+
expect(obj1).to be(obj2)
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'will use an existing context using on after using on_set' do
|
@@ -79,8 +79,8 @@ describe Symbiont::Factory do
|
|
79
79
|
@obj3 = page # obj1 CONTEXT is still set
|
80
80
|
end
|
81
81
|
|
82
|
-
@obj1.
|
83
|
-
@obj1.
|
82
|
+
expect(@obj1).not_to be(@obj2)
|
83
|
+
expect(@obj1).to be(@obj3)
|
84
84
|
end
|
85
85
|
|
86
86
|
it 'will use an existing context using on_new of a different class after using on_set' do
|
@@ -96,8 +96,8 @@ describe Symbiont::Factory do
|
|
96
96
|
@obj3 = page # CONTEXT is set to obj1
|
97
97
|
end
|
98
98
|
|
99
|
-
@obj1.
|
100
|
-
@obj1.
|
99
|
+
expect(@obj1).not_to be(@obj2)
|
100
|
+
expect(@obj1).to be (@obj3)
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'will clear existing context using on_new after using on_set' do
|
@@ -109,6 +109,6 @@ describe Symbiont::Factory do
|
|
109
109
|
@obj2 = page # ACTIVE nil; since page is same, CONTEXT is nil
|
110
110
|
end
|
111
111
|
|
112
|
-
@obj1.
|
112
|
+
expect(@obj1).not_to be(@obj2)
|
113
113
|
end
|
114
114
|
end
|
data/spec/symbiont/page_spec.rb
CHANGED
@@ -50,8 +50,14 @@ describe Symbiont::Page do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
context 'an instance of a page definition' do
|
53
|
+
it 'will be able to verify a page' do
|
54
|
+
expect(watir_browser).to receive(:title).and_return('Dialogic')
|
55
|
+
expect(watir_browser).to receive(:url).and_return('http://localhost:9292')
|
56
|
+
watir_definition.verified?
|
57
|
+
end
|
58
|
+
|
53
59
|
it 'will be able to get the active url' do
|
54
|
-
watir_browser.
|
60
|
+
expect(watir_browser).to receive(:url).exactly(3).times.and_return('http://localhost:9292')
|
55
61
|
expect(watir_definition).to respond_to :url
|
56
62
|
expect(watir_definition.current_url).to eq('http://localhost:9292')
|
57
63
|
expect(watir_definition.page_url).to eq('http://localhost:9292')
|
@@ -59,95 +65,95 @@ describe Symbiont::Page do
|
|
59
65
|
end
|
60
66
|
|
61
67
|
it 'will be able to get the markup of a page' do
|
62
|
-
watir_browser.
|
68
|
+
expect(watir_browser).to receive(:html).exactly(3).times.and_return('<h1>Page Section</h1>')
|
63
69
|
expect(watir_definition.markup).to eq('<h1>Page Section</h1>')
|
64
70
|
expect(watir_definition.html).to eq('<h1>Page Section</h1>')
|
65
71
|
expect(watir_definition.html).to include('<h1>Page')
|
66
72
|
end
|
67
73
|
|
68
74
|
it 'will be able to get the text of a page' do
|
69
|
-
watir_browser.
|
75
|
+
expect(watir_browser).to receive(:text).exactly(3).times.and_return('some page text')
|
70
76
|
expect(watir_definition.page_text).to eq('some page text')
|
71
77
|
expect(watir_definition.text).to eq('some page text')
|
72
78
|
expect(watir_definition.text).to include('page text')
|
73
79
|
end
|
74
80
|
|
75
81
|
it 'will be able to get the title of a page' do
|
76
|
-
watir_browser.
|
82
|
+
expect(watir_browser).to receive(:title).exactly(3).times.and_return('Page Title')
|
77
83
|
expect(watir_definition.page_title).to eq('Page Title')
|
78
84
|
expect(watir_definition.title).to eq('Page Title')
|
79
85
|
expect(watir_definition.title).to include('Title')
|
80
86
|
end
|
81
87
|
|
82
88
|
it 'will navigate to a specific url' do
|
83
|
-
watir_browser.
|
89
|
+
expect(watir_browser).to receive(:goto).exactly(3).times.with('http://localhost:9292')
|
84
90
|
watir_definition.visit('http://localhost:9292')
|
85
91
|
watir_definition.navigate_to('http://localhost:9292')
|
86
92
|
watir_definition.goto('http://localhost:9292')
|
87
93
|
end
|
88
94
|
|
89
95
|
it 'will be able to get a screenshot of the current page' do
|
90
|
-
watir_browser.
|
91
|
-
watir_browser.
|
96
|
+
expect(watir_browser).to receive(:wd).twice.and_return(watir_browser)
|
97
|
+
expect(watir_browser).to receive(:save_screenshot).twice
|
92
98
|
watir_definition.screenshot('testing.png')
|
93
99
|
watir_definition.save_screenshot('testing.png')
|
94
100
|
end
|
95
101
|
|
96
102
|
it 'will run a script against the browser' do
|
97
|
-
watir_browser.
|
103
|
+
expect(watir_browser).to receive(:execute_script).twice.and_return('input')
|
98
104
|
expect(watir_definition.run_script('return document.activeElement')).to eq('input')
|
99
105
|
expect(watir_definition.execute_script('return document.activeElement')).to eq('input')
|
100
106
|
end
|
101
107
|
|
102
108
|
it 'should run a script, with arguments, against the browser' do
|
103
|
-
watir_browser.
|
104
|
-
watir_definition.execute_script('return arguments[0].innerHTML', watir_element).
|
109
|
+
expect(watir_browser).to receive(:execute_script).with('return arguments[0].innerHTML', watir_element).and_return('testing')
|
110
|
+
expect(watir_definition.execute_script('return arguments[0].innerHTML', watir_element)).to eq('testing')
|
105
111
|
end
|
106
112
|
|
107
113
|
it 'will be able to get a cookie value' do
|
108
114
|
cookie = [{:name => 'test', :value => 'cookie', :path => '/'}]
|
109
|
-
watir_browser.
|
115
|
+
expect(watir_browser).to receive(:cookies).and_return(cookie)
|
110
116
|
expect(watir_definition.get_cookie('test')).to eq('cookie')
|
111
117
|
end
|
112
118
|
|
113
119
|
it 'will return nothing if a cookie value is not found' do
|
114
120
|
cookie = [{:name => 'test', :value =>'cookie', :path => '/'}]
|
115
|
-
watir_browser.
|
121
|
+
expect(watir_browser).to receive(:cookies).and_return(nil)
|
116
122
|
expect(watir_definition.get_cookie('testing')).to be_nil
|
117
123
|
end
|
118
124
|
|
119
125
|
it 'will be able to clear all cookies from the browser' do
|
120
|
-
watir_browser.
|
121
|
-
watir_browser.
|
126
|
+
expect(watir_browser).to receive(:cookies).twice.and_return(watir_browser)
|
127
|
+
expect(watir_browser).to receive(:clear).twice
|
122
128
|
watir_definition.remove_cookies
|
123
129
|
watir_definition.clear_cookies
|
124
130
|
end
|
125
131
|
|
126
132
|
it 'will be able to refresh the page' do
|
127
|
-
watir_browser.
|
133
|
+
expect(watir_browser).to receive(:refresh).twice.and_return(watir_browser)
|
128
134
|
watir_definition.refresh_page
|
129
135
|
watir_definition.refresh
|
130
136
|
end
|
131
137
|
|
132
138
|
it 'will be able to handle JavaScript alert dialogs' do
|
133
|
-
watir_browser.
|
134
|
-
watir_browser.
|
135
|
-
watir_browser.
|
136
|
-
watir_browser.
|
139
|
+
expect(watir_browser).to receive(:alert).exactly(3).times.and_return(watir_browser)
|
140
|
+
expect(watir_browser).to receive(:exists?).and_return(true)
|
141
|
+
expect(watir_browser).to receive(:text)
|
142
|
+
expect(watir_browser).to receive(:ok)
|
137
143
|
watir_definition.will_alert {}
|
138
144
|
end
|
139
145
|
|
140
146
|
it 'will be able to handle JavaScript confirmation dialogs' do
|
141
|
-
watir_browser.
|
142
|
-
watir_browser.
|
143
|
-
watir_browser.
|
144
|
-
watir_browser.
|
147
|
+
expect(watir_browser).to receive(:alert).exactly(3).times.and_return(watir_browser)
|
148
|
+
expect(watir_browser).to receive(:exists?).and_return(true)
|
149
|
+
expect(watir_browser).to receive(:text)
|
150
|
+
expect(watir_browser).to receive(:ok)
|
145
151
|
watir_definition.will_confirm(true) {}
|
146
152
|
end
|
147
153
|
|
148
154
|
it 'will be able to handle JavaScript prompt dialogs' do
|
149
|
-
watir_browser.
|
150
|
-
watir_browser.
|
155
|
+
expect(watir_browser).to receive(:wd).twice.and_return(watir_browser)
|
156
|
+
expect(watir_browser).to receive(:execute_script).twice
|
151
157
|
watir_definition.will_prompt('Testing') {}
|
152
158
|
end
|
153
159
|
end
|
data/symbiont.gemspec
CHANGED
@@ -37,7 +37,7 @@ Gem::Specification.new do |spec|
|
|
37
37
|
|
38
38
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
39
39
|
spec.add_development_dependency 'rake'
|
40
|
-
spec.add_development_dependency 'rspec', '>=
|
40
|
+
spec.add_development_dependency 'rspec', '>= 3.0'
|
41
41
|
|
42
42
|
spec.add_runtime_dependency 'colorize', '>= 0.7.2'
|
43
43
|
spec.add_runtime_dependency 'watir-webdriver', '>= 0.6.9'
|
data/test/symbiont-script.rb
CHANGED
@@ -49,6 +49,10 @@ class Practice
|
|
49
49
|
url_matches /:\d{4}/
|
50
50
|
title_is 'Dialogic - Practice Page'
|
51
51
|
|
52
|
+
checkbox :enable_sith_list, id: 'toggleSith'
|
53
|
+
select_list :sith_power, id: 'sith'
|
54
|
+
select_list :physics_concept, id: 'physics'
|
55
|
+
|
52
56
|
button :alert, id: 'alertButton'
|
53
57
|
button :confirm, id: 'confirmButton'
|
54
58
|
button :prompt, id: 'promptButton'
|
@@ -66,8 +70,6 @@ class Practice
|
|
66
70
|
end
|
67
71
|
end
|
68
72
|
|
69
|
-
@driver = Watir::Browser.new
|
70
|
-
|
71
73
|
def non_framed
|
72
74
|
@page = Weight.new(@driver)
|
73
75
|
@page.view
|
@@ -126,28 +128,32 @@ def factory
|
|
126
128
|
end
|
127
129
|
end
|
128
130
|
|
129
|
-
|
131
|
+
def javascript_dialogs
|
132
|
+
response = @page.will_alert { @page.alert.click }
|
133
|
+
expect(response).to eq 'Alert Message Received'
|
130
134
|
|
131
|
-
|
132
|
-
|
133
|
-
@page.login_as_admin
|
135
|
+
response = @page.will_confirm(false) { @page.confirm.click }
|
136
|
+
expect(response).to eq 'Confirmation Message Received'
|
134
137
|
|
135
|
-
|
136
|
-
|
138
|
+
response = @page.will_prompt("magenta") { @page.prompt.click }
|
139
|
+
expect(response[:message]).to eq('Favorite Color')
|
140
|
+
expect(response[:default_value]).to eq('blue')
|
141
|
+
end
|
137
142
|
|
138
|
-
|
139
|
-
|
143
|
+
def wait_state
|
144
|
+
Watir::Wait.until { @page.weight.exists? }
|
145
|
+
@page.weight.when_present.set '200'
|
146
|
+
end
|
140
147
|
|
141
|
-
|
142
|
-
expect(response).to eq 'Confirmation Message Received'
|
148
|
+
#basic
|
143
149
|
|
144
|
-
|
145
|
-
expect(response[:message]).to eq('Favorite Color')
|
146
|
-
expect(response[:default_value]).to eq('blue')
|
150
|
+
symbiont_driver
|
147
151
|
|
148
|
-
@page =
|
152
|
+
@page = Dialogic.new(@driver)
|
149
153
|
@page.view
|
154
|
+
@page.login_as_admin
|
150
155
|
|
151
|
-
|
152
|
-
|
153
|
-
@page.
|
156
|
+
@page = Practice.new(@driver)
|
157
|
+
@page.view
|
158
|
+
@page.enable_sith_list.set
|
159
|
+
@page.sith_power.select 'Sundering Assault'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: symbiont
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Nyman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: colorize
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,7 +127,7 @@ licenses:
|
|
127
127
|
- MIT
|
128
128
|
metadata: {}
|
129
129
|
post_install_message: "\n (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
130
|
-
(::)\n\n Symbiont 0.
|
130
|
+
(::)\n\n Symbiont 0.5.0 has been installed.\n\n (::) (::) (::) (::) (::)
|
131
131
|
(::) (::) (::) (::) (::) (::) (::)\n "
|
132
132
|
rdoc_options: []
|
133
133
|
require_paths:
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
requirements:
|
146
146
|
- Watir-WebDriver, Colorize
|
147
147
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
148
|
+
rubygems_version: 2.0.14
|
149
149
|
signing_key:
|
150
150
|
specification_version: 4
|
151
151
|
summary: An Endosymbiotic Facultative Semantically Clean Fluent Interface Test Framework
|
@@ -160,4 +160,3 @@ test_files:
|
|
160
160
|
- spec/symbiont/factory_spec.rb
|
161
161
|
- spec/symbiont/page_spec.rb
|
162
162
|
- test/symbiont-script.rb
|
163
|
-
has_rdoc:
|