symbiont 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05110d9c5eeb8d6971262bff19bad09cc4ed6086
4
- data.tar.gz: 589f9bbbf1eb5d49a919486bf7a31b89b952d4ab
3
+ metadata.gz: cd18724d4d14d9283a706ab94d792c729abdb1c9
4
+ data.tar.gz: 8f7e64b7080775f04027710b2e01d87599bb5861
5
5
  SHA512:
6
- metadata.gz: 298a058116b50448144fd72a1101951ffbe85fd6b57a246de08be66aad13b309905a0f61552632a24a2f20b476c5dc40ca933fc88fd75d217fe7420a719c82d1
7
- data.tar.gz: ef93ec40a82704bd0e00b3e8d85c566ba725f2e8ce39db1d1670903c9abf8387e6f4cacadd25cea103c556f82b4a7f2a6e4d6b2bb92b12c5e9fe05c656dca9a5
6
+ metadata.gz: 0481286fe56b0e66938637a42d68ee64e9207ba210788aa3e488e8632f44fcdca78598f2288f296836d69d76e5e0f008d21ae8a49a4c555d1453c1291468b49a
7
+ data.tar.gz: 4f4ce214003961b53b594eb6e1e09540a6e70f4b92281e2a93e3e398d1323f7a7b0ae1cdc87119a5bdbbb463d9ece9e7f47a443f9fabb5297bdde166f26e66ef
@@ -1,5 +1,7 @@
1
1
  module Symbiont
2
2
  module Accessor
3
+ # @param element [Symbol] name of Watir-based object
4
+ # @param locator [Hash] locators for referencing the element
3
5
  def reference_element(element, locator)
4
6
  driver.send(element, locator)
5
7
  end
@@ -18,7 +18,7 @@ module Symbiont
18
18
  @title = title
19
19
  end
20
20
 
21
- def url
21
+ def asserted_url
22
22
  @url
23
23
  end
24
24
 
@@ -26,7 +26,7 @@ module Symbiont
26
26
  @url_match
27
27
  end
28
28
 
29
- def page_title
29
+ def asserted_title
30
30
  @title
31
31
  end
32
32
  end
@@ -10,6 +10,14 @@ module Symbiont
10
10
  @elements
11
11
  end
12
12
 
13
+ def self.settable
14
+ @settable ||= [:text_field]
15
+ end
16
+
17
+ def self.settable?(element)
18
+ settable.include? element.to_sym
19
+ end
20
+
13
21
  module Element
14
22
  # Iterates through Watir factory methods. Each method is defined
15
23
  # as a method that can be called on a page class. This is what
@@ -19,22 +27,53 @@ module Symbiont
19
27
  identifier, locator = parse_signature(signature)
20
28
  context = context_from_signature(locator, &block)
21
29
  define_element_accessor(identifier, locator, element, &context)
30
+ define_set_accessor(identifier, locator, element, &context) if Symbiont.settable?(element)
22
31
  end
23
32
  end
24
33
 
25
34
  private
26
35
 
27
- # @param identifier [String] friendly name of element definition
28
- # @param locator [Array] locators for referencing the element
29
- # @param element [String] name of Watir-based object
36
+ # Defines an accessor method for an element that allows the friendly
37
+ # name of the element to be proxied to a Watir element object that
38
+ # corresponds to the element type.
39
+ #
40
+ # @param identifier [Symbol] friendly name of element definition
41
+ # @param locator [Hash] locators for referencing the element
42
+ # @param element [Symbol] name of Watir-based object
30
43
  # @param block [Proc] a context block
31
44
  #
32
45
  # @example
33
- # enable, {:id => 'enableForm'}, checkbox
46
+ # This element definition:
47
+ # text_field :weight, id: 'wt', index: 0
48
+ #
49
+ # passed in like this:
50
+ # :weight, {:id => 'wt', :index => 0}, :text_field
51
+ #
52
+ # This allows access like this:
53
+ # @page.weight.set '200'
54
+ #
55
+ # Access could also be done this way:
56
+ # @page.weight(id: 'wt').set '200'
57
+ #
58
+ # The second approach would lead to the *values variable having
59
+ # an array like this: [{:id => 'wt'}].
60
+ #
61
+ # A third approach would be to utilize one element definition
62
+ # within the context of another. Consider the following element
63
+ # definitions:
64
+ # article :practice, id: 'practice'
65
+ #
66
+ # a :page_link do |text|
67
+ # practice.a(text: text)
68
+ # end
69
+ #
70
+ # These could be utilized as such:
71
+ # on_view(Practice).page_link('Click Me').click
72
+ #
73
+ # This approach would lead to the *values variable having
74
+ # an array like this: ["Click Me"].
34
75
  def define_element_accessor(identifier, locator, element, &block)
35
76
  define_method "#{identifier}".to_sym do |*values|
36
- #puts "*** *values: #{values}"
37
-
38
77
  if block_given?
39
78
  instance_exec(*values, &block)
40
79
  else
@@ -43,6 +82,44 @@ module Symbiont
43
82
  end
44
83
  end
45
84
 
85
+ # Defines an accessor method for an element that allows the value of
86
+ # the element to be set via appending an "=" to the friendly name
87
+ # (identifier) of the element passed in.
88
+ #
89
+ # @param identifier [Symbol] friendly name of element definition
90
+ # @param locator [Hash] locators for referencing the element
91
+ # @param element [Symbol] name of Watir-based object
92
+ # @param block [Proc] a context block
93
+ #
94
+ # @example
95
+ # This element definition:
96
+ # text_field :weight, id: 'wt'
97
+ #
98
+ # Can be accessed in two ways:
99
+ # @page.weight.set '200'
100
+ # @page.weight = '200'
101
+ #
102
+ # The second approach would lead to the *values variable having
103
+ # an array like this: ['200']. The first approach would be
104
+ # handled by define_element_accessor instead.
105
+ def define_set_accessor(identifier, locator, element, &block)
106
+ define_method "#{identifier}=".to_sym do |*values|
107
+ puts "*** *values: #{values}"
108
+
109
+ accessor = if block_given?
110
+ instance_exec(&block)
111
+ else
112
+ reference_element(element, locator)
113
+ end
114
+
115
+ if accessor.respond_to?(:set)
116
+ accessor.set *values
117
+ else
118
+ accessor.send_keys *values
119
+ end
120
+ end
121
+ end
122
+
46
123
  # Returns the identifier and locator portions of an element definition.
47
124
  #
48
125
  # @param signature [Array] full element definition
@@ -56,6 +133,7 @@ module Symbiont
56
133
  #
57
134
  # @param locator [Array] locators from element definition
58
135
  # @param block [Proc] a context block
136
+ # @return [Proc] the context block or nil if there is no procedure
59
137
  def context_from_signature(*locator, &block)
60
138
  if block_given?
61
139
  block
@@ -3,8 +3,8 @@ module Symbiont
3
3
  include Helpers
4
4
 
5
5
  def view
6
- no_url_is_provided if url.nil?
7
- driver.goto(url)
6
+ no_url_is_provided if asserted_url.nil?
7
+ driver.goto(asserted_url)
8
8
  end
9
9
 
10
10
  def has_correct_url?
@@ -13,20 +13,115 @@ module Symbiont
13
13
  end
14
14
 
15
15
  def has_correct_title?
16
- no_title_is_provided if page_title.nil?
17
- !(driver.title.match(page_title)).nil?
16
+ no_title_is_provided if asserted_title.nil?
17
+ !(driver.title.match(asserted_title)).nil?
18
18
  end
19
19
 
20
- def url
21
- self.class.url
20
+ def asserted_url
21
+ self.class.asserted_url
22
22
  end
23
23
 
24
24
  def url_match
25
25
  self.class.url_match
26
26
  end
27
27
 
28
- def page_title
29
- self.class.page_title
28
+ def asserted_title
29
+ self.class.asserted_title
30
+ end
31
+
32
+ def url
33
+ driver.url
34
+ end
35
+
36
+ def markup
37
+ driver.html
38
+ end
39
+
40
+ def text
41
+ driver.text
42
+ end
43
+
44
+ def title
45
+ driver.title
46
+ end
47
+
48
+ def visit(url)
49
+ driver.goto(url)
50
+ end
51
+
52
+ def screenshot(file)
53
+ driver.wd.save_screenshot(file)
30
54
  end
55
+
56
+ def run_script(script, *args)
57
+ driver.execute_script(script, *args)
58
+ end
59
+
60
+ def get_cookie(name)
61
+ for cookie in driver.cookies.to_a
62
+ if cookie[:name] == name
63
+ return cookie[:value]
64
+ end
65
+ end
66
+ nil
67
+ end
68
+
69
+ def clear_cookies
70
+ driver.cookies.clear
71
+ end
72
+
73
+ def refresh
74
+ driver.refresh
75
+ end
76
+
77
+ # @param block [Proc] the code that generates the alert
78
+ # @return [String] the message contained in the alert message box
79
+ def will_alert(&block)
80
+ yield
81
+ value = nil
82
+ if driver.alert.exists?
83
+ value = driver.alert.text
84
+ driver.alert.ok
85
+ end
86
+ value
87
+ end
88
+
89
+ # @param response [Boolean] true to accept the confirmation, false to cancel it
90
+ # @param block [Proc] the code that generates the confirmation
91
+ # @return [String] the message contained in the confirmation message box
92
+ def will_confirm(response, &block)
93
+ yield
94
+ value = nil
95
+ if driver.alert.exists?
96
+ value = driver.alert.text
97
+ response ? driver.alert.ok : driver.alert.close
98
+ end
99
+ value
100
+ end
101
+
102
+ # @param response [String] the value to be used in the prompt
103
+ # @param block [Proc] the code that generates the prompt
104
+ # @return [Hash] :message for the prompt message, :default_value for
105
+ # the value that the prompt had before the response was applied
106
+ def will_prompt(response, &block)
107
+ cmd = "window.prompt = function(text, value) {window.__lastWatirPrompt = {message: text, default_value: value}; return '#{response}';}"
108
+ driver.wd.execute_script(cmd)
109
+ yield
110
+ result = driver.wd.execute_script('return window.__lastWatirPrompt')
111
+ result && result.dup.each_key { |k| result[k.to_sym] = result.delete(k) }
112
+ result
113
+ end
114
+
115
+ alias_method :current_url, :url
116
+ alias_method :page_url, :url
117
+ alias_method :html, :markup
118
+ alias_method :page_text, :text
119
+ alias_method :page_title, :title
120
+ alias_method :navigate_to, :visit
121
+ alias_method :goto, :visit
122
+ alias_method :save_screenshot, :screenshot
123
+ alias_method :execute_script, :run_script
124
+ alias_method :remove_cookies, :clear_cookies
125
+ alias_method :refresh_page, :refresh
31
126
  end
32
127
  end
@@ -1,3 +1,3 @@
1
1
  module Symbiont
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
data/lib/symbiont.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  require 'watir-webdriver'
2
2
 
3
3
  require 'symbiont/version'
4
- require 'symbiont/logging'
5
4
  require 'symbiont/errors'
6
5
  require 'symbiont/helpers'
7
6
 
8
7
  require 'colorize'
9
8
 
10
- require 'symbiont/platform'
11
9
  require 'symbiont/assertions'
12
10
  require 'symbiont/pages'
13
11
  require 'symbiont/elements'
@@ -15,8 +13,14 @@ require 'symbiont/accessor'
15
13
  require 'symbiont/factory'
16
14
 
17
15
  module Symbiont
18
- include Platform
19
16
 
17
+ # The included callback is used to provide the core functionality of the
18
+ # library to any class or module that includes the Symbiont library. The
19
+ # calling class or module is extended with logic that the library makes
20
+ # available as class methods. Any such class or module becomes a page or
21
+ # activity definition. The class methods allow assertions and element
22
+ # defintions to be defined.
23
+ #
20
24
  # @param caller [Class] the class including the framework
21
25
  def self.included(caller)
22
26
  caller.extend Symbiont::Assertion
@@ -27,6 +31,22 @@ module Symbiont
27
31
 
28
32
  Symbiont.trace("#{caller.class} #{caller} has attached the Symbiont.")
29
33
  end
34
+
35
+ def self.trace(message, level = 1)
36
+ puts '*' * level + " #{message}" if ENV['SYMBIONT_TRACE'] == 'on'
37
+ end
38
+
39
+ # @return [Object] browser driver reference
40
+ attr_reader :driver
41
+
42
+ # @param driver [Object] a tool driver instance
43
+ def initialize(driver)
44
+ Symbiont.trace("Dialect attached to driver:\n\t#{driver.inspect}")
45
+ @driver = driver
46
+
47
+ initialize_page if respond_to?(:initialize_page)
48
+ initialize_activity if respond_to?(:initialize_activity)
49
+ end
30
50
  end
31
51
 
32
52
  def attach(mod=Symbiont)
@@ -30,3 +30,26 @@ shared_examples_for 'element generator for' do |elements|
30
30
 
31
31
  end
32
32
  end
33
+
34
+ shared_examples_for 'element set generator for' do |elements|
35
+ elements.each do |element|
36
+ it "will set a value on a specific #{element} with a single locator" do
37
+ expect(watir_browser).to receive(element).with(id: element).and_return(watir_element)
38
+ expect(watir_element).to receive(:set).with('value')
39
+ watir_definition.send "#{element}=", 'value'
40
+ end
41
+
42
+ it "will attempt to send keypresses if a #{element} cannot be set" do
43
+ expect(watir_browser).to receive(element).with(id: element).and_return(watir_element)
44
+ allow(watir_element).to receive(:respond_to?).with(:set).and_return(false)
45
+ expect(watir_element).to receive(:send_keys).with('value')
46
+ watir_definition.send "#{element}=", 'value'
47
+ end
48
+
49
+ it "will set a value on a specific #{element} with a proc" do
50
+ expect(watir_browser).to receive(element).with(id: element).and_return(watir_element)
51
+ expect(watir_element).to receive(:set).with('value')
52
+ watir_definition.send "#{element}_proc=", 'value'
53
+ end
54
+ end
55
+ end
@@ -5,4 +5,5 @@ 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
9
  end
@@ -2,15 +2,16 @@ require 'spec_helper'
2
2
 
3
3
  describe Symbiont::Page do
4
4
  include_context :page
5
+ include_context :element
5
6
 
6
7
  context 'a page definition being used - url' do
7
8
  it 'will establish no default url' do
8
- expect(empty_definition.url).to be_nil
9
+ expect(empty_definition.asserted_url).to be_nil
9
10
  end
10
11
 
11
12
  it 'will establish a page url with the url_is assertion' do
12
- expect(watir_definition).to respond_to :url
13
- expect(watir_definition.url).to eq('http://localhost:9292')
13
+ expect(watir_definition).to respond_to :asserted_url
14
+ expect(watir_definition.asserted_url).to eq('http://localhost:9292')
14
15
  end
15
16
 
16
17
  it 'will not view a page if the url_is assertion has not been set' do
@@ -35,16 +36,119 @@ describe Symbiont::Page do
35
36
 
36
37
  context 'a page definition being used - title' do
37
38
  it 'will establish no default title' do
38
- expect(empty_definition.page_title).to be_nil
39
+ expect(empty_definition.asserted_title).to be_nil
39
40
  end
40
41
 
41
42
  it 'will establish a page title with the title_is assertion' do
42
- expect(watir_definition).to respond_to :page_title
43
- expect(watir_definition.page_title).to eq('Dialogic')
43
+ expect(watir_definition).to respond_to :asserted_title
44
+ expect(watir_definition.asserted_title).to eq('Dialogic')
44
45
  end
45
46
 
46
47
  it 'will not verify a title if the title_is assertion has not been set' do
47
48
  expect { empty_definition.has_correct_title? }.to raise_error Symbiont::Errors::NoTitleForDefinition
48
49
  end
49
50
  end
51
+
52
+ context 'an instance of a page definition' do
53
+ it 'will be able to get the active url' do
54
+ watir_browser.should_receive(:url).exactly(3).times.and_return('http://localhost:9292')
55
+ expect(watir_definition).to respond_to :url
56
+ expect(watir_definition.current_url).to eq('http://localhost:9292')
57
+ expect(watir_definition.page_url).to eq('http://localhost:9292')
58
+ expect(watir_definition.url).to eq('http://localhost:9292')
59
+ end
60
+
61
+ it 'will be able to get the markup of a page' do
62
+ watir_browser.should_receive(:html).exactly(3).times.and_return('<h1>Page Section</h1>')
63
+ expect(watir_definition.markup).to eq('<h1>Page Section</h1>')
64
+ expect(watir_definition.html).to eq('<h1>Page Section</h1>')
65
+ expect(watir_definition.html).to include('<h1>Page')
66
+ end
67
+
68
+ it 'will be able to get the text of a page' do
69
+ watir_browser.should_receive(:text).exactly(3).times.and_return('some page text')
70
+ expect(watir_definition.page_text).to eq('some page text')
71
+ expect(watir_definition.text).to eq('some page text')
72
+ expect(watir_definition.text).to include('page text')
73
+ end
74
+
75
+ it 'will be able to get the title of a page' do
76
+ watir_browser.should_receive(:title).exactly(3).times.and_return('Page Title')
77
+ expect(watir_definition.page_title).to eq('Page Title')
78
+ expect(watir_definition.title).to eq('Page Title')
79
+ expect(watir_definition.title).to include('Title')
80
+ end
81
+
82
+ it 'will navigate to a specific url' do
83
+ watir_browser.should_receive(:goto).exactly(3).times.with('http://localhost:9292')
84
+ watir_definition.visit('http://localhost:9292')
85
+ watir_definition.navigate_to('http://localhost:9292')
86
+ watir_definition.goto('http://localhost:9292')
87
+ end
88
+
89
+ it 'will be able to get a screenshot of the current page' do
90
+ watir_browser.should_receive(:wd).twice.and_return(watir_browser)
91
+ watir_browser.should_receive(:save_screenshot).twice
92
+ watir_definition.screenshot('testing.png')
93
+ watir_definition.save_screenshot('testing.png')
94
+ end
95
+
96
+ it 'will run a script against the browser' do
97
+ watir_browser.should_receive(:execute_script).twice.and_return('input')
98
+ expect(watir_definition.run_script('return document.activeElement')).to eq('input')
99
+ expect(watir_definition.execute_script('return document.activeElement')).to eq('input')
100
+ end
101
+
102
+ it 'should run a script, with arguments, against the browser' do
103
+ watir_browser.should_receive(:execute_script).with('return arguments[0].innerHTML', watir_element).and_return('testing')
104
+ watir_definition.execute_script('return arguments[0].innerHTML', watir_element).should == 'testing'
105
+ end
106
+
107
+ it 'will be able to get a cookie value' do
108
+ cookie = [{:name => 'test', :value => 'cookie', :path => '/'}]
109
+ watir_browser.should_receive(:cookies).and_return(cookie)
110
+ expect(watir_definition.get_cookie('test')).to eq('cookie')
111
+ end
112
+
113
+ it 'will return nothing if a cookie value is not found' do
114
+ cookie = [{:name => 'test', :value =>'cookie', :path => '/'}]
115
+ watir_browser.should_receive(:cookies).and_return(nil)
116
+ expect(watir_definition.get_cookie('testing')).to be_nil
117
+ end
118
+
119
+ it 'will be able to clear all cookies from the browser' do
120
+ watir_browser.should_receive(:cookies).twice.and_return(watir_browser)
121
+ watir_browser.should_receive(:clear).twice
122
+ watir_definition.remove_cookies
123
+ watir_definition.clear_cookies
124
+ end
125
+
126
+ it 'will be able to refresh the page' do
127
+ watir_browser.should_receive(:refresh).twice.and_return(watir_browser)
128
+ watir_definition.refresh_page
129
+ watir_definition.refresh
130
+ end
131
+
132
+ it 'will be able to handle JavaScript alert dialogs' do
133
+ watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
134
+ watir_browser.should_receive(:exists?).and_return(true)
135
+ watir_browser.should_receive(:text)
136
+ watir_browser.should_receive(:ok)
137
+ watir_definition.will_alert {}
138
+ end
139
+
140
+ it 'will be able to handle JavaScript confirmation dialogs' do
141
+ watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
142
+ watir_browser.should_receive(:exists?).and_return(true)
143
+ watir_browser.should_receive(:text)
144
+ watir_browser.should_receive(:ok)
145
+ watir_definition.will_confirm(true) {}
146
+ end
147
+
148
+ it 'will be able to handle JavaScript prompt dialogs' do
149
+ watir_browser.should_receive(:wd).twice.and_return(watir_browser)
150
+ watir_browser.should_receive(:execute_script).twice
151
+ watir_definition.will_prompt('Testing') {}
152
+ end
153
+ end
50
154
  end
@@ -15,6 +15,18 @@ class Dialogic
15
15
  attach Symbiont
16
16
 
17
17
  url_is 'http://localhost:9292'
18
+
19
+ p :login_form, id: 'open'
20
+ text_field :username, id: 'username'
21
+ text_field :password, id: 'password'
22
+ button :login, id: 'login-button'
23
+
24
+ def login_as_admin
25
+ login_form.click
26
+ username.set 'admin'
27
+ password.set 'admin'
28
+ login.click
29
+ end
18
30
  end
19
31
 
20
32
  class Weight
@@ -37,6 +49,10 @@ class Practice
37
49
  url_matches /:\d{4}/
38
50
  title_is 'Dialogic - Practice Page'
39
51
 
52
+ button :alert, id: 'alertButton'
53
+ button :confirm, id: 'confirmButton'
54
+ button :prompt, id: 'promptButton'
55
+
40
56
  link :view_in_frame, id: 'framed_page'
41
57
 
42
58
  iframe :boxframe, class: 'fancybox-iframe'
@@ -62,9 +78,11 @@ end
62
78
  def framed
63
79
  @page = Practice.new(@driver)
64
80
  @page.view
65
- #@page.view_in_frame.click
81
+ ##@page.view_in_frame.click
66
82
  @page.page_link('View Weight Calculator in Frame').click
67
83
  @page.weight.set '200'
84
+
85
+ ##on_view(Practice).page_link('View Weight Calculator in Frame').click
68
86
  end
69
87
 
70
88
  def basic
@@ -78,20 +96,58 @@ def basic
78
96
 
79
97
  @page.should have_correct_url
80
98
  @page.should have_correct_title
81
- end
82
99
 
83
- #basic
100
+ expect(@page.url).to eq('http://localhost:9292/practice')
101
+ @page.markup.include?('<strong id="group">Apocalypticists Unite</strong>').should be_true
102
+ @page.text.include?('LEAST FAVORITE WAY').should be_true
103
+ expect(@page.title).to eq('Dialogic - Practice Page')
84
104
 
85
- on_view(Weight)
86
- on(Weight).convert('200')
87
- on(Weight).calculate.click
105
+ script = <<-JS
106
+ return arguments[0].innerHTML
107
+ JS
88
108
 
89
- on(Weight) do
90
- @active.convert('200')
91
- @active.calculate.click
109
+ result = @page.run_script(script, @page.view_in_frame)
110
+ expect(result).to eq('View Weight Calculator in Frame')
92
111
  end
93
112
 
94
- on(Weight) do |page|
95
- page.convert('200')
96
- page.calculate.click
113
+ def factory
114
+ on_view(Weight)
115
+ on(Weight).convert('200')
116
+ on(Weight).calculate.click
117
+
118
+ on(Weight) do
119
+ @active.convert('200')
120
+ @active.calculate.click
121
+ end
122
+
123
+ on(Weight) do |page|
124
+ page.convert('200')
125
+ page.calculate.click
126
+ end
97
127
  end
128
+
129
+ #basic
130
+
131
+ @page = Dialogic.new(@driver)
132
+ @page.view
133
+ @page.login_as_admin
134
+
135
+ @page = Practice.new(@driver)
136
+ @page.view
137
+
138
+ response = @page.will_alert { @page.alert.click }
139
+ expect(response).to eq 'Alert Message Received'
140
+
141
+ response = @page.will_confirm(false) { @page.confirm.click }
142
+ expect(response).to eq 'Confirmation Message Received'
143
+
144
+ response = @page.will_prompt("magenta") { @page.prompt.click }
145
+ expect(response[:message]).to eq('Favorite Color')
146
+ expect(response[:default_value]).to eq('blue')
147
+
148
+ @page = Weight.new(@driver)
149
+ @page.view
150
+
151
+ Watir::Wait.until { @page.weight.exists? }
152
+
153
+ @page.weight.when_present.set '200'
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.3.0
4
+ version: 0.4.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-05-02 00:00:00.000000000 Z
11
+ date: 2014-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,9 +109,7 @@ files:
109
109
  - lib/symbiont/errors.rb
110
110
  - lib/symbiont/factory.rb
111
111
  - lib/symbiont/helpers.rb
112
- - lib/symbiont/logging.rb
113
112
  - lib/symbiont/pages.rb
114
- - lib/symbiont/platform.rb
115
113
  - lib/symbiont/version.rb
116
114
  - spec/fixtures/element_definitions.rb
117
115
  - spec/fixtures/mock_drivers.rb
@@ -129,7 +127,7 @@ licenses:
129
127
  - MIT
130
128
  metadata: {}
131
129
  post_install_message: "\n (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
132
- (::)\n\n Symbiont 0.3.0 has been installed.\n\n (::) (::) (::) (::) (::)
130
+ (::)\n\n Symbiont 0.4.0 has been installed.\n\n (::) (::) (::) (::) (::)
133
131
  (::) (::) (::) (::) (::) (::) (::)\n "
134
132
  rdoc_options: []
135
133
  require_paths:
@@ -1,5 +0,0 @@
1
- module Symbiont
2
- def self.trace(message, level = 1)
3
- puts '*' * level + " #{message}" if ENV['SYMBIONT_TRACE'] == 'on'
4
- end
5
- end
@@ -1,12 +0,0 @@
1
- module Symbiont
2
- module Platform
3
- # @return [Object] browser driver reference
4
- attr_reader :driver
5
-
6
- # @param driver [Object] a tool driver instance
7
- def initialize(driver)
8
- Symbiont.trace("Dialect attached to driver:\n\t#{driver.inspect}")
9
- @driver = driver
10
- end
11
- end
12
- end