selenium-webdriver-element-decorators 0.1.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.
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Alexei Barantsev
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,19 @@
1
+ = selenium-webdriver-element-decorators
2
+
3
+ Description goes here.
4
+
5
+ == Contributing to selenium-webdriver-element-decorators
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
+ * Fork the project
10
+ * Start a feature/bugfix branch
11
+ * Commit and push until you are happy with your contribution
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2011 Alexei Barantsev. See LICENSE.txt for
18
+ further details.
19
+
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/element'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Elements
6
+
7
+ class Browser < Element
8
+
9
+ def initialize element
10
+ if element.is_a?(Selenium::WebDriver::Driver) then
11
+ @element = element
12
+ elsif element.is_a?(Symbol) then
13
+ @element = Selenium::WebDriver.for element
14
+ else
15
+ raise TypeError.new "Can't create Browser decorator for #{element.inspect}"
16
+ end
17
+ @browser = @element
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,80 @@
1
+ require 'rubygems'
2
+ require 'selenium/webdriver'
3
+
4
+ module Selenium
5
+ module WebDriver
6
+ module Elements
7
+
8
+ class Element
9
+
10
+ def initialize element, browser
11
+ unless element.is_a? Selenium::WebDriver::Element
12
+ raise TypeError.new "Can't create Element decorator for #{element.inspect}"
13
+ end
14
+ @element = element
15
+ @browser = browser
16
+ end
17
+
18
+ def method_missing methodname, *args
19
+ @element.send methodname.to_sym, *args
20
+ end
21
+
22
+ def create_element element, browser
23
+ case element.tag_name
24
+ when 'form' then Form.new element, browser
25
+ when 'input' then
26
+ case element.attribute('type')
27
+ when 'file' then FileChooser.new element, browser
28
+ else Textbox.new element, browser
29
+ end
30
+ when 'textarea' then Textbox.new element, browser
31
+ when 'select' then Select.new element, browser
32
+ else Element.new element, browser
33
+ end
34
+ end
35
+
36
+ def find_element *args
37
+ begin
38
+ el = @element.find_element *args
39
+ create_element(el, @browser)
40
+ rescue Selenium::WebDriver::Error::NoSuchElementError
41
+ nil
42
+ end
43
+ end
44
+
45
+ def find_elements *args
46
+ @element.find_elements(*args).collect { |el| Element.new el, @browser }
47
+ end
48
+
49
+ def element_present? *args
50
+ find_element(*args) != nil
51
+ end
52
+
53
+ def find_select *args
54
+ begin
55
+ Select.new(@element.find_element *args)
56
+ rescue Selenium::WebDriver::Error::NoSuchElementError
57
+ nil
58
+ end
59
+ end
60
+
61
+ def find_file_chooser *args
62
+ begin
63
+ FileChooser.new(@element.find_element *args)
64
+ rescue Selenium::WebDriver::Error::NoSuchElementError
65
+ nil
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ def send_keys *args
72
+ if @browser.browser == :chrome
73
+ @element.click
74
+ end
75
+ @element.send_keys *args
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/element'
2
+ require 'rubygems'
3
+ require 'au3'
4
+
5
+ module Selenium
6
+ module WebDriver
7
+ module Elements
8
+
9
+ class FileChooser < Element
10
+
11
+ def initialize element, browser
12
+ super element, browser
13
+ unless element.tag_name == 'input' and element.attribute('type') == 'file'
14
+ raise TypeError.new "Can't create Chooser decorator for #{element.inspect}"
15
+ end
16
+ end
17
+
18
+ def choose_file filename
19
+ case @browser.browser
20
+ when :chrome then raise "Chrome not supported"
21
+ else @element.send_keys filename
22
+ end
23
+ end
24
+
25
+ def autoit
26
+ autoit = Thread.new do
27
+ AutoItX3::Window.wait "Open"
28
+ dialog = AutoItX3::Window.new "Open"
29
+ dialog.activate
30
+ dialog.wait_active
31
+ AutoItX3::Edit.new("Open", "", "Edit1").text = filename
32
+ AutoItX3::Button.new("Open", "", "Button1").click
33
+ end
34
+ @element.click
35
+ autoit.join
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/element'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Elements
6
+
7
+ class Form < Element
8
+
9
+ def initialize element, browser
10
+ super element, browser
11
+ unless element.tag_name == 'form'
12
+ raise TypeError.new "Can't create Form decorator for #{element.inspect}"
13
+ end
14
+ end
15
+
16
+ def populate
17
+
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+
26
+
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/element'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Elements
6
+
7
+ class Select < Element
8
+
9
+ def initialize element, browser
10
+ super element, browser
11
+ unless element.tag_name == 'select'
12
+ raise TypeError.new "Can't create Select decorator for #{element.inspect}"
13
+ end
14
+ end
15
+
16
+ def select_by_value value
17
+ options = @element.find_elements :tag_name => 'option'
18
+ options.each { |opt|
19
+ if (opt.value == value)
20
+ opt.select()
21
+ break
22
+ end
23
+ }
24
+ end
25
+
26
+ def select_by_text text
27
+ options = @element.find_elements :tag_name => 'option'
28
+ options.each { |opt|
29
+ if (opt.text == text)
30
+ opt.select()
31
+ break
32
+ end
33
+ }
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+
42
+
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/element'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Elements
6
+
7
+ class Textbox < Element
8
+
9
+ def initialize element, browser
10
+ super element, browser
11
+ unless element.tag_name == 'input' or element.tag_name == 'textarea'
12
+ raise TypeError.new "Can't create Textbox decorator for #{element.inspect}"
13
+ end
14
+ end
15
+
16
+ def type *args
17
+ if @browser.browser == :chrome
18
+ @element.click
19
+ end
20
+ @element.clear
21
+ @element.send_keys *args
22
+ end
23
+
24
+ def append *args
25
+ if @browser.browser == :chrome
26
+ @element.click
27
+ end
28
+ @element.send_keys *args
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+
37
+
@@ -0,0 +1,6 @@
1
+ require 'selenium/webdriver/elements/element'
2
+ require 'selenium/webdriver/elements/browser'
3
+ require 'selenium/webdriver/elements/form'
4
+ require 'selenium/webdriver/elements/textbox'
5
+ require 'selenium/webdriver/elements/select'
6
+ require 'selenium/webdriver/elements/file_chooser'
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
+
3
+ include Selenium::WebDriver::Elements
4
+
5
+ describe "Browser" do
6
+
7
+ before(:each) do
8
+ @browser.navigate.to 'http://www.google.com/ncr'
9
+ end
10
+
11
+ it "should load pages" do
12
+ @browser.title.should eq "Google"
13
+ end
14
+
15
+ it "should find single element" do
16
+ logo = @browser.find_element :id => "hplogo"
17
+ logo.attribute("alt").should eq "Google"
18
+ end
19
+
20
+ it "should find several elements" do
21
+ links = @browser.find_elements :class => "gb1"
22
+ links.length.should eq 7
23
+ end
24
+
25
+ it "should type in textbox" do
26
+ textbox = @browser.find_element :name => "q"
27
+ textbox.should be_kind_of Textbox
28
+ textbox.type "Ruby", :enter
29
+ textbox.value.should eq "Ruby"
30
+ end
31
+
32
+ it "should select from list" do
33
+ textbox = @browser.find_element :name => "q"
34
+ textbox.type "Ruby", :enter
35
+
36
+ @browser.find_element(:link => "Shopping").click
37
+ list = @browser.find_element :id => "ps_sort"
38
+ list.select_by_text "Price: high to low"
39
+ end
40
+
41
+ end
@@ -0,0 +1,21 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'rubygems'
5
+ require 'rspec'
6
+ require 'selenium/webdriver'
7
+ require 'selenium/webdriver/elements'
8
+
9
+ include Selenium::WebDriver::Elements
10
+
11
+ RSpec.configure do |c|
12
+
13
+ c.before(:all) do
14
+ @browser = Browser.new :firefox
15
+ end
16
+
17
+ c.after(:all) do
18
+ @browser.quit
19
+ end
20
+
21
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: selenium-webdriver-element-decorators
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ prerelease: false
10
+ platform: ruby
11
+ authors:
12
+ - Alexei Barantsev
13
+ autorequire: !!null
14
+ bindir: bin
15
+ cert_chain: []
16
+ date: 2011-02-16 00:00:00.000000000 +03:00
17
+ default_executable: !!null
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: rspec
21
+ requirement: &25498800 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 2.5.0
27
+ segments:
28
+ - 2
29
+ - 5
30
+ - 0
31
+ type: :development
32
+ prerelease: false
33
+ version_requirements: *25498800
34
+ - !ruby/object:Gem::Dependency
35
+ name: bundler
36
+ requirement: &25498068 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 1.0.0
42
+ segments:
43
+ - 1
44
+ - 0
45
+ - 0
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *25498068
49
+ - !ruby/object:Gem::Dependency
50
+ name: jeweler
51
+ requirement: &25497192 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 1.5.2
57
+ segments:
58
+ - 1
59
+ - 5
60
+ - 2
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: *25497192
64
+ - !ruby/object:Gem::Dependency
65
+ name: rcov
66
+ requirement: &25496436 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ segments:
73
+ - 0
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: *25496436
77
+ - !ruby/object:Gem::Dependency
78
+ name: selenium-webdriver
79
+ requirement: &25495620 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ~>
83
+ - !ruby/object:Gem::Version
84
+ version: 0.1.3
85
+ segments:
86
+ - 0
87
+ - 1
88
+ - 3
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *25495620
92
+ - !ruby/object:Gem::Dependency
93
+ name: au3
94
+ requirement: &25463436 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: 0.1.2
100
+ segments:
101
+ - 0
102
+ - 1
103
+ - 2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: *25463436
107
+ - !ruby/object:Gem::Dependency
108
+ name: au3
109
+ requirement: &25462548 !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ~>
113
+ - !ruby/object:Gem::Version
114
+ version: 0.1.2
115
+ segments:
116
+ - 0
117
+ - 1
118
+ - 2
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: *25462548
122
+ description: Selenium 2.0 (WebDriver) decorators for web-elements that provide specific
123
+ methods fot each web-element
124
+ email: barancev@gmail.com
125
+ executables: []
126
+ extensions: []
127
+ extra_rdoc_files:
128
+ - LICENSE.txt
129
+ - README.rdoc
130
+ files:
131
+ - lib/selenium/webdriver/elements.rb
132
+ - lib/selenium/webdriver/elements/browser.rb
133
+ - lib/selenium/webdriver/elements/element.rb
134
+ - lib/selenium/webdriver/elements/file_chooser.rb
135
+ - lib/selenium/webdriver/elements/form.rb
136
+ - lib/selenium/webdriver/elements/select.rb
137
+ - lib/selenium/webdriver/elements/textbox.rb
138
+ - LICENSE.txt
139
+ - README.rdoc
140
+ - spec/browser_spec.rb
141
+ - spec/spec_helper.rb
142
+ has_rdoc: true
143
+ homepage: http://github.com/barancev/selenium-webdriver-element-decorators
144
+ licenses:
145
+ - MIT
146
+ post_install_message: !!null
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ segments:
157
+ - 0
158
+ hash: 1058641185
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ segments:
166
+ - 0
167
+ requirements: []
168
+ rubyforge_project: !!null
169
+ rubygems_version: 1.3.7
170
+ signing_key: !!null
171
+ specification_version: 3
172
+ summary: Selenium 2.0 (WebDriver) decorators for web-elements
173
+ test_files:
174
+ - spec/browser_spec.rb
175
+ - spec/spec_helper.rb