less-form 0.0.2
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +43 -0
- data/LICENSE.txt +20 -0
- data/README.md +39 -0
- data/README.rdoc +19 -0
- data/Rakefile +44 -0
- data/VERSION +1 -0
- data/chromedriver.log +1218 -0
- data/less-form.gemspec +81 -0
- data/lib/less-form.rb +14 -0
- data/lib/less-form/button.rb +5 -0
- data/lib/less-form/checkbox.rb +17 -0
- data/lib/less-form/element.rb +42 -0
- data/lib/less-form/errors.rb +5 -0
- data/lib/less-form/form.rb +47 -0
- data/lib/less-form/options.rb +28 -0
- data/lib/less-form/radio.rb +14 -0
- data/lib/less-form/select.rb +30 -0
- data/lib/less-form/table.rb +6 -0
- data/lib/less-form/text_field.rb +8 -0
- data/lib/webdriver-ext/element.rb +8 -0
- data/spec/html/form.html +25 -0
- data/spec/less-form_spec.rb +73 -0
- data/spec/spec_helper.rb +16 -0
- data/usage.rb +12 -0
- metadata +145 -0
data/less-form.gemspec
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "less-form"
|
8
|
+
s.version = "0.0.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["easonhan"]
|
12
|
+
s.date = "2013-04-20"
|
13
|
+
s.description = "form element wrapper for selenium-webdriver, make your test code more readable and make your form element handing easy"
|
14
|
+
s.email = "nbkhic@gmail.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md",
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".document",
|
22
|
+
".rspec",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"LICENSE.txt",
|
26
|
+
"README.md",
|
27
|
+
"README.rdoc",
|
28
|
+
"Rakefile",
|
29
|
+
"VERSION",
|
30
|
+
"chromedriver.log",
|
31
|
+
"lib/less-form.rb",
|
32
|
+
"lib/less-form/button.rb",
|
33
|
+
"lib/less-form/checkbox.rb",
|
34
|
+
"lib/less-form/element.rb",
|
35
|
+
"lib/less-form/errors.rb",
|
36
|
+
"lib/less-form/form.rb",
|
37
|
+
"lib/less-form/options.rb",
|
38
|
+
"lib/less-form/radio.rb",
|
39
|
+
"lib/less-form/select.rb",
|
40
|
+
"lib/less-form/table.rb",
|
41
|
+
"lib/less-form/text_field.rb",
|
42
|
+
"lib/webdriver-ext/element.rb",
|
43
|
+
"spec/html/form.html",
|
44
|
+
"spec/less-form_spec.rb",
|
45
|
+
"spec/spec_helper.rb",
|
46
|
+
"usage.rb"
|
47
|
+
]
|
48
|
+
s.homepage = "https://github.com/easonhan007/less-form"
|
49
|
+
s.licenses = ["MIT"]
|
50
|
+
s.require_paths = ["lib"]
|
51
|
+
s.rubygems_version = "1.8.16"
|
52
|
+
s.summary = "form element wrapper for selenium-webdriver"
|
53
|
+
|
54
|
+
if s.respond_to? :specification_version then
|
55
|
+
s.specification_version = 3
|
56
|
+
|
57
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
58
|
+
s.add_runtime_dependency(%q<selenium-webdriver>, ["~> 2.31.0"])
|
59
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
60
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
61
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
62
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.13.0"])
|
63
|
+
s.add_development_dependency(%q<selenium-webdriver>, ["~> 2.31.0"])
|
64
|
+
else
|
65
|
+
s.add_dependency(%q<selenium-webdriver>, ["~> 2.31.0"])
|
66
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
67
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
68
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
69
|
+
s.add_dependency(%q<rspec>, ["~> 2.13.0"])
|
70
|
+
s.add_dependency(%q<selenium-webdriver>, ["~> 2.31.0"])
|
71
|
+
end
|
72
|
+
else
|
73
|
+
s.add_dependency(%q<selenium-webdriver>, ["~> 2.31.0"])
|
74
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
75
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
76
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
77
|
+
s.add_dependency(%q<rspec>, ["~> 2.13.0"])
|
78
|
+
s.add_dependency(%q<selenium-webdriver>, ["~> 2.31.0"])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
data/lib/less-form.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'selenium-webdriver'
|
2
|
+
require 'webdriver-ext/element'
|
3
|
+
require 'less-form/errors'
|
4
|
+
require 'less-form/element'
|
5
|
+
require 'less-form/text_field'
|
6
|
+
require 'less-form/radio'
|
7
|
+
require 'less-form/checkbox'
|
8
|
+
require 'less-form/table'
|
9
|
+
require 'less-form/select'
|
10
|
+
require 'less-form/options'
|
11
|
+
require 'less-form/button'
|
12
|
+
require 'less-form/form'
|
13
|
+
|
14
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module LessForm
|
2
|
+
class Element
|
3
|
+
attr_reader :element
|
4
|
+
def initialize wd_element
|
5
|
+
@element = wd_element
|
6
|
+
end
|
7
|
+
|
8
|
+
def valid_element? wd_element
|
9
|
+
raise InvalidWebDriverElementError unless wd_element.is_a?(Selenium::WebDriver::Element)
|
10
|
+
end
|
11
|
+
|
12
|
+
def set what=nil
|
13
|
+
@element.send_keys(what)
|
14
|
+
end
|
15
|
+
|
16
|
+
def click
|
17
|
+
@element.click
|
18
|
+
end
|
19
|
+
|
20
|
+
def text
|
21
|
+
@element.text
|
22
|
+
end
|
23
|
+
|
24
|
+
def displayed?
|
25
|
+
@element.displayed?
|
26
|
+
end
|
27
|
+
|
28
|
+
def flash
|
29
|
+
@element.flash
|
30
|
+
end
|
31
|
+
|
32
|
+
def method_missing m, *args, &blk
|
33
|
+
if @element.respond_to?(m)
|
34
|
+
@element.send m, *args, &blk
|
35
|
+
else
|
36
|
+
value = @element.attribute(m.to_s)
|
37
|
+
(value.nil?)? super : value
|
38
|
+
end #if
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end #LessForm
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module LessForm
|
2
|
+
class Form
|
3
|
+
attr_reader :wd
|
4
|
+
|
5
|
+
def initialize wd
|
6
|
+
@wd ||= wd if valid_wd?(wd)
|
7
|
+
end
|
8
|
+
|
9
|
+
def valid_wd?(wd)
|
10
|
+
raise InvalidDriverError unless wd.is_a?(Selenium::WebDriver::Driver)
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def text_field(how, what)
|
15
|
+
TextField.new(locate(how, what))
|
16
|
+
end
|
17
|
+
|
18
|
+
def text_area(how, what)
|
19
|
+
TextArea.new(locate(how, what))
|
20
|
+
end
|
21
|
+
|
22
|
+
def radio how, what
|
23
|
+
Radio.new locate(how, what)
|
24
|
+
end
|
25
|
+
|
26
|
+
def table how, what
|
27
|
+
Table.new locate(how, what)
|
28
|
+
end
|
29
|
+
|
30
|
+
def checkbox how, what
|
31
|
+
Checkbox.new locate(how, what)
|
32
|
+
end
|
33
|
+
|
34
|
+
def select how, what
|
35
|
+
Select.new locate(how, what)
|
36
|
+
end
|
37
|
+
|
38
|
+
def button how, what
|
39
|
+
Button.new locate(how, what)
|
40
|
+
end
|
41
|
+
|
42
|
+
def locate how, what
|
43
|
+
@wd.find_element(how ,what)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end #LessForm
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module LessForm
|
2
|
+
class Options
|
3
|
+
def initialize select_element
|
4
|
+
@elements = select_element.find_elements(:css, 'option')
|
5
|
+
end
|
6
|
+
|
7
|
+
def all
|
8
|
+
@elements.map {|e| e.text }
|
9
|
+
end
|
10
|
+
|
11
|
+
def by_value value
|
12
|
+
Option.new @elements.detect {|e| e.attribute('value') == value}
|
13
|
+
end
|
14
|
+
|
15
|
+
def by_text text
|
16
|
+
Option.new @elements.detect {|e| e.text == text}
|
17
|
+
end
|
18
|
+
|
19
|
+
def selected
|
20
|
+
Option.new @elements.detect {|e| e.selected?}
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class Option < Element
|
26
|
+
end
|
27
|
+
|
28
|
+
end #LessForm
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module LessForm
|
2
|
+
class Select < Element
|
3
|
+
def initialize element
|
4
|
+
super
|
5
|
+
@options = Options.new(element)
|
6
|
+
end
|
7
|
+
|
8
|
+
def options
|
9
|
+
@options.all
|
10
|
+
end
|
11
|
+
|
12
|
+
def select_by_value(value)
|
13
|
+
@options.by_value(value).click
|
14
|
+
end
|
15
|
+
|
16
|
+
def select_by_text text
|
17
|
+
@options.by_text(text).click
|
18
|
+
end
|
19
|
+
|
20
|
+
def select text
|
21
|
+
select_by_text text
|
22
|
+
end
|
23
|
+
|
24
|
+
def selected
|
25
|
+
@options.selected
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end #LessForm
|
data/spec/html/form.html
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>form</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<form>
|
7
|
+
<input type="text" id="text_field" />
|
8
|
+
<hr />
|
9
|
+
<textarea rows="10" id="area"></textarea>
|
10
|
+
<hr />
|
11
|
+
<span>Radio1</span><input type="radio" id="radio1" />
|
12
|
+
<span>Radio2</span><input type="radio" id="radio2" />
|
13
|
+
<hr />
|
14
|
+
<span>Checkbox</span><input type="checkbox" id="checkbox" />
|
15
|
+
<hr />
|
16
|
+
<select id="select">
|
17
|
+
<option value="car">Car</option>
|
18
|
+
<option value="bus">Bus</option>
|
19
|
+
<option value="bike">Bike</option>
|
20
|
+
</select>
|
21
|
+
<br />
|
22
|
+
<input type="submit" value="submit" name="btn" />
|
23
|
+
</form>
|
24
|
+
</body>
|
25
|
+
</html>
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe LessForm do
|
4
|
+
before :all do
|
5
|
+
@dr = Selenium::WebDriver.for :chrome
|
6
|
+
@dr.get html_path('form')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should set value to text field' do
|
10
|
+
LessForm::Form.new(@dr).text_field(:id, 'text_field').set 'ok'
|
11
|
+
LessForm::Form.new(@dr).text_field(:id, 'text_field').value.should eq('ok')
|
12
|
+
@dr.find_element(id: 'text_field').attribute('value').should eq('ok')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should set value to text area' do
|
16
|
+
LessForm::Form.new(@dr).text_area(:id, 'area').set 'ok'
|
17
|
+
LessForm::Form.new(@dr).text_area(:id, 'area').value.should eq('ok')
|
18
|
+
@dr.find_element(id: 'area').attribute('value').should eq('ok')
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should set raido' do
|
22
|
+
LessForm::Form.new(@dr).radio(:id, 'radio1').set
|
23
|
+
LessForm::Form.new(@dr).radio(:id, 'radio1').should be_set
|
24
|
+
@dr.find_element(id: 'radio1').should be_selected
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should set checkbox' do
|
28
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').set true
|
29
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').should be_set
|
30
|
+
@dr.find_element(id: 'checkbox').should be_selected
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should clear checkbox' do
|
34
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').set true
|
35
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').should be_set
|
36
|
+
@dr.find_element(id: 'checkbox').should be_selected
|
37
|
+
|
38
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').set false
|
39
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').should_not be_set
|
40
|
+
@dr.find_element(id: 'checkbox').should_not be_selected
|
41
|
+
|
42
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').set true
|
43
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').clear
|
44
|
+
LessForm::Form.new(@dr).checkbox(:id, 'checkbox').should_not be_set
|
45
|
+
@dr.find_element(id: 'checkbox').should_not be_selected
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should have correct selected item' do
|
49
|
+
LessForm::Form.new(@dr).select(:id, 'select').selected.value.should eq('car')
|
50
|
+
@dr.find_elements(css: 'option').detect {|e| e.selected?}.attribute('value').should eq('car')
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should select by value' do
|
54
|
+
select = LessForm::Form.new(@dr).select(:id, 'select')
|
55
|
+
select.select_by_value('bike')
|
56
|
+
select.selected.value.should eq('bike')
|
57
|
+
@dr.find_elements(css: 'option').detect {|e| e.selected?}.attribute('value').should eq('bike')
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should select by text' do
|
61
|
+
LessForm::Form.new(@dr).select(:id, 'select').select_by_text('Bus')
|
62
|
+
@dr.find_elements(css: 'option').detect {|e| e.selected?}.attribute('value').should eq('bus')
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should click button' do
|
66
|
+
LessForm::Form.new(@dr).button(:name, 'btn').click
|
67
|
+
end
|
68
|
+
|
69
|
+
after :all do
|
70
|
+
@dr.close
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'less-form'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
|
12
|
+
def html_path(file_name)
|
13
|
+
'file:///' + File.expand_path(File.join('.', 'spec', 'html', "#{file_name}.html"))
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|