selenium_fury 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/selenium_fury.rb CHANGED
@@ -23,7 +23,6 @@ require "selenium-client"
23
23
  require 'nokogiri'
24
24
 
25
25
  require "selenium_fury/common/page_parser"
26
- require "selenium_fury/common/selenium_api_chooser"
27
26
  require "selenium_fury/selenium_web_driver/create_selenium_web_driver"
28
27
  require "selenium_fury/selenium_web_driver/element_finder"
29
28
  require "selenium_fury/selenium_web_driver/page_object_components"
@@ -36,5 +35,3 @@ require "selenium_fury/selenium_web_driver/generic_elements/generic_element"
36
35
 
37
36
  include SeleniumFury::SeleniumWebDriver::PageGenerator
38
37
  include SeleniumFury::SeleniumWebDriver::PageValidator
39
-
40
- include SeleniumFury::SeleniumApiChooser
@@ -9,9 +9,16 @@ module SeleniumFury
9
9
  def initialize(locator, driver=nil, opt={})
10
10
  @location = locator
11
11
  @driver = driver
12
+ @tags = opt[:tags]
13
+ @validate = opt[:validate] != false # true if nil
12
14
  end
13
15
 
14
- attr_accessor :location, :driver
16
+ attr_accessor :location, :driver, :tags
17
+ attr_writer :validate
18
+
19
+ def validate?
20
+ @validate
21
+ end
15
22
  end
16
23
 
17
24
  class CheckboxElement < GenericElement
@@ -31,6 +31,12 @@ module GenericElementHelpers
31
31
  end
32
32
 
33
33
  module ElementWaitHelpers
34
+ def web_driver_wait(opt=10, &condition)
35
+ options={}
36
+ opt.kind_of?(Integer) ? options[:timeout] = opt : options = opt
37
+ Selenium::WebDriver::Wait.new(options).until { condition.call }
38
+ end
39
+
34
40
  def wait_present(timeout)
35
41
  web_driver_wait(timeout) { present? }
36
42
  end
@@ -28,7 +28,7 @@ module SeleniumFury
28
28
  end
29
29
  result += "\n\nend"
30
30
  $stdout.puts result
31
- return result
31
+ result
32
32
  end
33
33
 
34
34
  # @param page_object_attributes [Hash]
@@ -41,8 +41,7 @@ module SeleniumFury
41
41
  end
42
42
  }
43
43
  print_selenium_web_driver_page_object page_object_attributes,class_name
44
- return Object.const_set(class_name, klass).new(driver)
45
-
44
+ Object.const_set(class_name, klass).new(driver)
46
45
  end
47
46
 
48
47
  # @param driver [Selenium::WebDriver::Driver]
@@ -56,6 +55,12 @@ module SeleniumFury
56
55
  print_selenium_web_driver_page_object page_object_attributes
57
56
  end
58
57
 
58
+ # @param driver [Selenium::WebDriver::Driver]
59
+ # @return [String]
60
+ def generate(driver)
61
+ web_driver_generate(driver)
62
+ end
63
+
59
64
  # @param driver [Selenium::WebDriver::Driver]
60
65
  # @param class_name [string]
61
66
  # @return [PageObject]
@@ -16,34 +16,54 @@
16
16
  module SeleniumFury
17
17
  module SeleniumWebDriver
18
18
  module PageValidator
19
- def web_driver_validate(page_class)
19
+ def web_driver_validate(page_class, validate_tags={})
20
20
  raise("Cannot find driver") if driver.nil?
21
21
  missing_elements=[]
22
- validated_elements=[]
22
+ skipped_elements=[]
23
23
  puts "class #{page_class}"
24
24
  page_object=page_class.new(driver)
25
25
  raise "Could not find web driver elements in #{page_class}" if page_class.elements.nil?
26
26
  page_class.elements.each do |web_driver_element_name|
27
27
  puts "\tValidating #{web_driver_element_name}"
28
28
  begin
29
- if page_object.send(web_driver_element_name).is_a? Selenium::WebDriver::Element
30
- page_object.method(web_driver_element_name).call
31
- else
32
- raise unless page_object.send(web_driver_element_name).present?
33
- end
29
+ element_obj = page_object.send(web_driver_element_name)
34
30
  rescue
35
31
  puts "\t\t\tCould not find #{web_driver_element_name}"
36
32
  missing_elements.push(web_driver_element_name)
37
33
  end
34
+ next unless element_obj.respond_to? :validate?
35
+ validate_element = case
36
+ when validate_tags[:validate_any] && validate_tags[:validate_all]
37
+ raise "Can't use both :validate_any and :validate_all tags"
38
+ when !element_obj.validate?
39
+ false # Already set to skip
40
+ when validate_tags[:validate_any] && element_obj.tags
41
+ element_obj.tags.any? { |tag| validate_tags[:validate_any].include? tag }
42
+ when validate_tags[:validate_all] && element_obj.tags
43
+ element_obj.tags.all? { |tag| validate_tags[:validate_all].include? tag }
44
+ else
45
+ true
46
+ end
47
+ if validate_element && !element_obj.present?
48
+ puts "\t\t\tCould not find #{web_driver_element_name}"
49
+ missing_elements.push(web_driver_element_name)
50
+ end
51
+ skipped_elements.push(web_driver_element_name) unless validate_element
38
52
  end
39
53
  if missing_elements.length > 0
40
54
  puts "Missing Elements:"
41
- missing_elements.each do |element|
42
- puts element
43
- end
55
+ missing_elements.each { |element| puts "\t#{element}" }
56
+ end
57
+ if skipped_elements.length > 0
58
+ puts "Skipped Elements:"
59
+ skipped_elements.each { |element| puts "\t#{element}" }
44
60
  end
45
61
  raise "Found Missing Elements: #{missing_elements.inspect}" if missing_elements.length > 0
46
62
  end
63
+
64
+ def validate(page_class, validate_tags={})
65
+ web_driver_validate(page_class, validate_tags)
66
+ end
47
67
  end
48
68
  end
49
69
  end
@@ -1,3 +1,3 @@
1
1
  module SeleniumFury
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -1,18 +1,66 @@
1
1
  require 'spec_helper'
2
2
  describe SeleniumFury::SeleniumWebDriver::PageValidator do
3
3
 
4
- it "should have a missing element exception" do
4
+ before(:each) do
5
+ launch_web_driver TEST_PAGE_URL
6
+ end
7
+
8
+ context "with present elements" do
9
+
10
+ it "should not raise an error when validating" do
11
+ expect { validate(TestPage) }.to_not raise_error
12
+ end
13
+ end
14
+
15
+ context "with missing elements" do
5
16
  class MissingElement < PageObject
6
17
  element :not_a_element1, {:id => "not a element1"}
7
18
  element :not_a_element2, {:id => "not a element2"}
19
+ generic_element :not_a_element3, {:id => "not a element3"}
20
+ generic_element :not_a_element4, {:id => "not a element4"}
8
21
  end
9
- launch_web_driver TEST_PAGE_URL
10
- expect { validate(MissingElement) }.to raise_exception RuntimeError, "Found Missing Elements: [:not_a_element1, :not_a_element2]"
11
- end
12
22
 
13
- it "should validate elements" do
14
- launch_web_driver TEST_PAGE_URL
15
- validate(TestPage)
23
+ it "should find missing elements for both old and new element types" do
24
+ expect { validate(MissingElement) }.
25
+ to raise_exception(RuntimeError, "Found Missing Elements: [:not_a_element1, :not_a_element2, :not_a_element3, :not_a_element4]")
26
+ end
16
27
  end
17
28
 
18
- end
29
+ context "with skipped elements" do
30
+ class SkippedElement < PageObject
31
+ generic_element :skip_hard_coded_element, {id: 'not_here'}, {validate: false}
32
+ generic_element :foo_element, {css: 'missing_foo_element'}, {tags: [:foo]}
33
+ generic_element :bar_element, {css: 'missing_bar_element'}, {tags: [:bar]}
34
+ generic_element :multiple_tag, {css: 'missing_mult_tag_element'}, {tags: [:foo, :bar]}
35
+ generic_element :no_tag, {css: 'missing_no_tag_element'}
36
+ end
37
+
38
+ it "should validate everything not hard coded when no tags are passed" do
39
+ expect { validate(SkippedElement) }.
40
+ to raise_exception(RuntimeError, "Found Missing Elements: [:foo_element, :bar_element, :multiple_tag, :no_tag]")
41
+ end
42
+
43
+ it "should validate all elements where all tags defined in the Page Object are passed in with the test" do
44
+ expect { validate(SkippedElement, validate_all: [:foo]) }.
45
+ to raise_exception(RuntimeError, "Found Missing Elements: [:foo_element, :no_tag]")
46
+ expect { validate(SkippedElement, validate_all: [:bar]) }.
47
+ to raise_exception(RuntimeError, "Found Missing Elements: [:bar_element, :no_tag]")
48
+ expect { validate(SkippedElement, validate_all: [:foo, :bar]) }.
49
+ to raise_exception(RuntimeError, "Found Missing Elements: [:foo_element, :bar_element, :multiple_tag, :no_tag]")
50
+ end
51
+
52
+ it "should validate all elements where any tag defined in Page Object is passed in with the test" do
53
+ expect { validate(SkippedElement, validate_any: [:foo]) }.
54
+ to raise_exception(RuntimeError, "Found Missing Elements: [:foo_element, :multiple_tag, :no_tag]")
55
+ expect { validate(SkippedElement, validate_any: [:bar]) }.
56
+ to raise_exception(RuntimeError, "Found Missing Elements: [:bar_element, :multiple_tag, :no_tag]")
57
+ expect { validate(SkippedElement, validate_any: [:foo, :bar]) }.
58
+ to raise_exception(RuntimeError, "Found Missing Elements: [:foo_element, :bar_element, :multiple_tag, :no_tag]")
59
+ end
60
+
61
+ it "should not allow multiple types of tag logic" do
62
+ expect { validate(SkippedElement, {validate_any: [:foo], validate_all: [:bar]}) }.
63
+ to raise_exception(RuntimeError, "Can't use both :validate_any and :validate_all tags")
64
+ end
65
+ end
66
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selenium_fury
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-17 00:00:00.000000000 Z
12
+ date: 2013-05-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: selenium-webdriver
@@ -130,7 +130,6 @@ files:
130
130
  - features/validate_page_object.feature
131
131
  - lib/selenium_fury.rb
132
132
  - lib/selenium_fury/common/page_parser.rb
133
- - lib/selenium_fury/common/selenium_api_chooser.rb
134
133
  - lib/selenium_fury/selenium_web_driver/create_selenium_web_driver.rb
135
134
  - lib/selenium_fury/selenium_web_driver/element_finder.rb
136
135
  - lib/selenium_fury/selenium_web_driver/generic_elements/generic_element.rb
@@ -142,7 +141,6 @@ files:
142
141
  - lib/selenium_fury/version.rb
143
142
  - selenium_fury.gemspec
144
143
  - spec/common/page_parser_spec.rb
145
- - spec/common/selenium_api_chooser_spec.rb
146
144
  - spec/selenium_web_driver/element_finder_spec.rb
147
145
  - spec/selenium_web_driver/generic_elements_spec.rb
148
146
  - spec/selenium_web_driver/page_generator_spec.rb
@@ -167,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
165
  version: '0'
168
166
  segments:
169
167
  - 0
170
- hash: -4010786722862812326
168
+ hash: 417938360726335985
171
169
  required_rubygems_version: !ruby/object:Gem::Requirement
172
170
  none: false
173
171
  requirements:
@@ -176,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
174
  version: '0'
177
175
  segments:
178
176
  - 0
179
- hash: -4010786722862812326
177
+ hash: 417938360726335985
180
178
  requirements: []
181
179
  rubyforge_project:
182
180
  rubygems_version: 1.8.25
@@ -191,7 +189,6 @@ test_files:
191
189
  - features/support/hooks.rb
192
190
  - features/validate_page_object.feature
193
191
  - spec/common/page_parser_spec.rb
194
- - spec/common/selenium_api_chooser_spec.rb
195
192
  - spec/selenium_web_driver/element_finder_spec.rb
196
193
  - spec/selenium_web_driver/generic_elements_spec.rb
197
194
  - spec/selenium_web_driver/page_generator_spec.rb
@@ -1,42 +0,0 @@
1
- #/* Copyright (c) 2010 HomeAway, Inc.
2
- # * All rights reserved. http://www.homeaway.com
3
- # *
4
- # * Licensed under the Apache License, Version 2.0 (the "License");
5
- # * you may not use this file except in compliance with the License.
6
- # * You may obtain a copy of the License at
7
- # *
8
- # * http://www.apache.org/licenses/LICENSE-2.0
9
- # *
10
- # * Unless required by applicable law or agreed to in writing, software
11
- # * distributed under the License is distributed on an "AS IS" BASIS,
12
- # * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # * See the License for the specific language governing permissions and
14
- # * limitations under the License.
15
- # */
16
- module SeleniumFury
17
- module SeleniumApiChooser
18
- def generate(selenium_api_object)
19
- if selenium_api_object.class == Selenium::Client::Driver
20
- return get_source_and_print_elements(selenium_api_object)
21
- end
22
- if selenium_api_object.class == Selenium::WebDriver::Driver
23
- return web_driver_generate(selenium_api_object)
24
- end
25
- end
26
-
27
- # @return [Array] validated page elements
28
- # @param [PageObject] page_object
29
- # @param [string] live_url
30
- def validate(page_object, live_url = nil)
31
- if defined?(browser)
32
- unless browser.nil?
33
- return check_page_file_class(page_object, *live_url)
34
- end
35
- end
36
- unless driver.nil?
37
- return web_driver_validate(page_object)
38
- end
39
- end
40
-
41
- end
42
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
- describe SeleniumFury::SeleniumApiChooser do
3
- context "Finding generate/validate methods" do
4
- it "should find the generator for selenium web_driver tests" do
5
- launch_web_driver TEST_PAGE_URL
6
- should_receive(:web_driver_generate)
7
- generate(driver)
8
- end
9
- it "should find the validator for selenium web driver tests" do
10
- launch_web_driver TEST_PAGE_URL
11
- should_receive(:web_driver_validate).with(NilClass)
12
- validate(NilClass)
13
- end
14
- end
15
- end