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/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