less-form 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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,5 @@
1
+ module LessForm
2
+ class Button < Element
3
+ end
4
+
5
+ end #LessForm
@@ -0,0 +1,17 @@
1
+ module LessForm
2
+ class Checkbox < Radio
3
+
4
+ def set what
5
+ if what
6
+ (set?)? nil : @element.click
7
+ else
8
+ (set?)? @element.click : nil
9
+ end #if
10
+ end
11
+
12
+ def clear
13
+ set false
14
+ end
15
+ end
16
+
17
+ end #LessForm
@@ -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,5 @@
1
+ module LessForm
2
+ class LessFormError < StandardError; end
3
+ class InvalidDriverError < LessFormError; end
4
+ class InvalidWebDriverElementError < LessFormError; end
5
+ 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,14 @@
1
+ module LessForm
2
+ class Radio < Element
3
+
4
+ def set?
5
+ @element.selected?
6
+ end
7
+
8
+ def set
9
+ @element.click
10
+ end
11
+
12
+ end
13
+
14
+ 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
@@ -0,0 +1,6 @@
1
+ module LessForm
2
+ class Table < Element
3
+
4
+ end
5
+
6
+ end #LessForm
@@ -0,0 +1,8 @@
1
+ module LessForm
2
+ class TextField < Element
3
+ end
4
+
5
+ class TextArea < TextField
6
+ end
7
+
8
+ end #LessForm
@@ -0,0 +1,8 @@
1
+ class Selenium::WebDriver::Element
2
+ def flash
3
+ high_light_script = 'arguments[0].style.border = "3px solid red"'
4
+ @bridge.executeScript(high_light_script, self)
5
+ end
6
+ alias_method :high_light, :flash
7
+ end
8
+
@@ -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
@@ -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