less-form 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|