pageify 0.1.2 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fcfb4cfc0efdca4c41e31bcbb76eaa16865772b3
4
- data.tar.gz: 266c6196459b4b9a1c8935b36b37314b86ff15f0
3
+ metadata.gz: 9d21aa14b7f880ca329b8ca5062400711cd9b414
4
+ data.tar.gz: f617f59a06c6f7dbf308d8c7276d2a0c2a9adc59
5
5
  SHA512:
6
- metadata.gz: cb6b5f73249579dcab64ee693b9e7531e0920ee08c044a2bb2e4bbe9099667ab292a802f28bed335095442dffa9342c3cc42cf7b8a56eaa2d6ff2a4b46477fa4
7
- data.tar.gz: 3276acbaaf49ab5a59bda5df61748c90132e47c634e23c87964090ea61d9dc72ada8bd17a470a93695038babb03022ebdce7445e353a647c984358e66fb45ad6
6
+ metadata.gz: 3e5c75dfb031ef3dce726ed4bcfe35eb96ca75c300b59a381ba41c684f8fc675fb6f87de079d2b239b2b7a0162634df26594be30da54c4403a8d740fb85df1ac
7
+ data.tar.gz: 3a7cb6709aa29dc03edcce762f5d724054abc7cb3d86f3b06b475af385aee3a092b980fa4abc98cf0f70d987a431aea9c66e5a0149f6a6ef54a5fa121df1bc76
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ #Pageify
2
+
3
+ Lets you define page objects for your UI tests, written in Ruby.
4
+
5
+ ##Example
6
+
7
+ Page definition looks like this
8
+ ```yaml
9
+ home_page: ".home"
10
+ login: "div.login"
11
+ user_name: "input.user"
12
+ password: "input.password"
13
+ submit: "[name='submit']"
14
+ profile_name: "a.profile"
15
+ settings: "a.settings"
16
+ sign_up: "a.sign_up"
17
+ ```
18
+ Test steps looks like this
19
+ ```ruby
20
+ fill_in home_page.login.user_name :with => "hi"
21
+ fill_in home_page.login.password :with => "bla"
22
+ click_on home_page.login.submit
23
+
24
+ home_page.profile_name.should match_text "hi"
25
+ hoem_pafe.settings.should be_visible
26
+ ```
27
+
28
+ ## Key benefits
29
+
30
+ - Your test will be more **readable**.
31
+ - **Eliminates duplicate** definition of selectors across test.
32
+ - **Easy Maintenance**.
33
+
34
+ ## Usage
35
+ In your project Gemfile add
36
+ ```ruby
37
+ gem 'pageify'
38
+ ```
39
+ ###Cucumber
40
+ In env.rb
41
+ ```ruby
42
+ include Pageify
43
+ pageify("features/pages")
44
+ ```
45
+ Place all the page defenitions under "features/pages"
46
+
data/lib/pageify.rb CHANGED
@@ -5,17 +5,15 @@ module Pageify
5
5
  def pageify(base_dir)
6
6
  base_dir.chomp! '/'
7
7
  all_pages = []
8
- Dir["#{base_dir}/**/"].each do |dir|
9
- Dir["#{dir}*.page"].each do |file|
10
- to_page_objects file
11
- end
8
+ Dir["#{base_dir}/**/*.page"].each do |file|
9
+ to_page_objects file
12
10
  end
13
11
  end
14
12
 
15
13
  def createElement(raw_row)
16
14
  element = PageObject.create(raw_row)
17
- define_method(element.name) do
18
- $selector = element.selector
15
+ define_method(element.name) do
16
+ $selector = element.selector.strip_quotes.strip
19
17
  element
20
18
  end
21
19
  element
@@ -30,7 +28,7 @@ module Pageify
30
28
  until rawArray.empty? do
31
29
  thisElement = rawArray.first
32
30
  nextElement = rawArray[1]
33
- until parent.last.intend < thisElement.lspace do
31
+ until parent.last.intend < thisElement.lspace do
34
32
  parent.pop
35
33
  end
36
34
  element = parent.last.createChild(thisElement)
@@ -1,11 +1,16 @@
1
- class PageObject
1
+ class PageObject
2
2
  attr_accessor :name,:parent,:selector,:intend
3
3
 
4
4
  def createChild (raw_row)
5
5
  child = PageObject.create(raw_row)
6
6
  child.parent = self
7
7
  define_singleton_method(child.name) do |*arguments|
8
- $selector += child.selector % arguments
8
+ child_selector = (child.selector % arguments).strip_quotes.strip
9
+ if child_selector.start_with? "&"
10
+ $selector += child_selector.gsub(/^&/, "")
11
+ else
12
+ $selector += " " + child_selector
13
+ end
9
14
  child
10
15
  end
11
16
  return child
@@ -19,7 +24,7 @@ class PageObject
19
24
  end
20
25
 
21
26
  def p
22
- $selector.gsub("\"","").strip
27
+ $selector.strip
23
28
  end
24
29
 
25
30
  def initialize (name,selector,intend)
@@ -2,8 +2,8 @@ class String
2
2
  def lspace
3
3
  self[/\A */].size
4
4
  end
5
- end
6
-
7
-
8
-
9
5
 
6
+ def strip_quotes
7
+ self.gsub("\"", "")
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ root: ".root"
2
+ simple: ".simple"
3
+ complex: ".complex"
4
+ nested: ".nested"
5
+ whitespace: " .whitespace "
6
+ whitespace_nested: " .whitespace_nested "
7
+ arg: ".arg:nth-of-type(%s)"
8
+ arg_nested: ".arg_nested"
9
+ nth: "&:nth-of-type(%d)"
10
+ nth_variant: "&.nth_variant"
11
+ nth_nested: ".nth_nested"
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pageify do
4
+ before :each do
5
+ base_dir = File.expand_path File.join __FILE__, '..', 'pages'
6
+ @pageModule = Module.new.extend(Pageify)
7
+ @pageModule.pageify base_dir
8
+ @page = Class.new.send(:include, @pageModule).new
9
+ end
10
+
11
+ it "should have root" do
12
+ @page.root.p.should == ".root"
13
+ end
14
+
15
+ it "should have simple page" do
16
+ @page.root.simple.p.should == ".root .simple"
17
+ end
18
+
19
+ it "should have nested pages" do
20
+ @page.root.complex.p.should == ".root .complex"
21
+ @page.root.complex.nested.p.should == ".root .complex .nested"
22
+ end
23
+
24
+ it "should check arguments" do
25
+ @page.root.complex.arg(1).p.should == ".root .complex .arg:nth-of-type(1)"
26
+ end
27
+
28
+ it "should check pages nested inside arguments" do
29
+ @page.root.complex.arg(1).arg_nested.p.should == ".root .complex .arg:nth-of-type(1) .arg_nested"
30
+ end
31
+
32
+ it "does not support multiple pages at the same time" do
33
+ p1 = @page.root.simple
34
+ p2 = @page.root.complex.nested
35
+
36
+ p1.p.should == ".root .complex .nested"
37
+ p2.p.should == ".root .complex .nested"
38
+ end
39
+
40
+ it "should normalize whitespace" do
41
+ @page.root.complex.whitespace.p.should == ".root .complex .whitespace"
42
+ @page.root.complex.whitespace.whitespace_nested.p.should == ".root .complex .whitespace .whitespace_nested"
43
+ end
44
+
45
+ it "& should add to previous selector" do
46
+ @page.root.complex.nth(1).nth_variant.nth_nested.p.should == ".root .complex:nth-of-type(1).nth_variant .nth_nested"
47
+ end
48
+ end
@@ -0,0 +1,7 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'pageify'
5
+
6
+ RSpec.configure do |config|
7
+ end
metadata CHANGED
@@ -1,24 +1,56 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pageify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Deepak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-28 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2014-04-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.10.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.10.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  description: Simplify page object definition for UI tests
14
42
  email: anandhadeepak@gmail.com
15
43
  executables: []
16
44
  extensions: []
17
45
  extra_rdoc_files: []
18
46
  files:
47
+ - README.md
48
+ - lib/pageify.rb
19
49
  - lib/pageify/element.rb
20
50
  - lib/pageify/string.rb
21
- - lib/pageify.rb
51
+ - spec/pages/sample.page
52
+ - spec/sample_spec.rb
53
+ - spec/spec_helper.rb
22
54
  homepage: https://github.com/paramadeep/pageify
23
55
  licenses:
24
56
  - MIT
@@ -29,18 +61,21 @@ require_paths:
29
61
  - lib
30
62
  required_ruby_version: !ruby/object:Gem::Requirement
31
63
  requirements:
32
- - - '>='
64
+ - - ">="
33
65
  - !ruby/object:Gem::Version
34
66
  version: '0'
35
67
  required_rubygems_version: !ruby/object:Gem::Requirement
36
68
  requirements:
37
- - - '>='
69
+ - - ">="
38
70
  - !ruby/object:Gem::Version
39
71
  version: '0'
40
72
  requirements: []
41
73
  rubyforge_project:
42
- rubygems_version: 2.0.3
74
+ rubygems_version: 2.2.2
43
75
  signing_key:
44
76
  specification_version: 4
45
- summary: Added selector for the parent node
46
- test_files: []
77
+ summary: Simplify page object definition for UI tests
78
+ test_files:
79
+ - spec/pages/sample.page
80
+ - spec/spec_helper.rb
81
+ - spec/sample_spec.rb