page_magic 1.2.8 → 2.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.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +23 -4
  3. data/.simplecov +5 -3
  4. data/.zsh_config +6 -0
  5. data/Dockerfile +11 -0
  6. data/Gemfile +13 -13
  7. data/Gemfile.lock +136 -148
  8. data/Makefile +17 -0
  9. data/README.md +26 -5
  10. data/Rakefile +12 -2
  11. data/VERSION +1 -1
  12. data/circle.yml +3 -1
  13. data/lib/active_support/core_ext/object/to_query.rb +84 -0
  14. data/lib/page_magic.rb +31 -24
  15. data/lib/page_magic/class_methods.rb +5 -2
  16. data/lib/page_magic/comparator.rb +37 -0
  17. data/lib/page_magic/comparator/fuzzy.rb +23 -0
  18. data/lib/page_magic/comparator/literal.rb +22 -0
  19. data/lib/page_magic/comparator/null.rb +26 -0
  20. data/lib/page_magic/comparator/parameter_map.rb +52 -0
  21. data/lib/page_magic/driver.rb +3 -0
  22. data/lib/page_magic/drivers.rb +6 -5
  23. data/lib/page_magic/drivers/poltergeist.rb +2 -0
  24. data/lib/page_magic/drivers/rack_test.rb +3 -1
  25. data/lib/page_magic/drivers/selenium.rb +4 -2
  26. data/lib/page_magic/element.rb +35 -15
  27. data/lib/page_magic/element/locators.rb +8 -5
  28. data/lib/page_magic/element/not_found.rb +38 -0
  29. data/lib/page_magic/element/query.rb +21 -20
  30. data/lib/page_magic/element/query/multiple_results.rb +21 -0
  31. data/lib/page_magic/element/query/prefetched_result.rb +26 -0
  32. data/lib/page_magic/element/query/single_result.rb +20 -0
  33. data/lib/page_magic/element/selector.rb +41 -16
  34. data/lib/page_magic/element/selector/methods.rb +18 -0
  35. data/lib/page_magic/element/selector/model.rb +21 -0
  36. data/lib/page_magic/element_context.rb +7 -21
  37. data/lib/page_magic/element_definition_builder.rb +20 -24
  38. data/lib/page_magic/elements.rb +65 -69
  39. data/lib/page_magic/elements/config.rb +103 -0
  40. data/lib/page_magic/elements/inheritance_hooks.rb +15 -0
  41. data/lib/page_magic/elements/types.rb +25 -0
  42. data/lib/page_magic/exceptions.rb +6 -1
  43. data/lib/page_magic/instance_methods.rb +8 -3
  44. data/lib/page_magic/mapping.rb +79 -0
  45. data/lib/page_magic/session.rb +15 -35
  46. data/lib/page_magic/session_methods.rb +3 -1
  47. data/lib/page_magic/transitions.rb +49 -0
  48. data/lib/page_magic/utils/string.rb +18 -0
  49. data/lib/page_magic/utils/url.rb +20 -0
  50. data/lib/page_magic/wait_methods.rb +3 -0
  51. data/lib/page_magic/watcher.rb +12 -17
  52. data/lib/page_magic/watchers.rb +31 -15
  53. data/page_magic.gemspec +15 -11
  54. data/spec/lib/active_support/core_ext/object/to_query_test.rb +78 -0
  55. data/spec/page_magic/class_methods_spec.rb +66 -37
  56. data/spec/page_magic/comparator/fuzzy_spec.rb +44 -0
  57. data/spec/page_magic/comparator/literal_spec.rb +41 -0
  58. data/spec/page_magic/comparator/null_spec.rb +35 -0
  59. data/spec/page_magic/comparator/parameter_map_spec.rb +75 -0
  60. data/spec/page_magic/driver_spec.rb +26 -28
  61. data/spec/page_magic/drivers/poltergeist_spec.rb +6 -7
  62. data/spec/page_magic/drivers/rack_test_spec.rb +6 -9
  63. data/spec/page_magic/drivers/selenium_spec.rb +11 -12
  64. data/spec/page_magic/drivers_spec.rb +38 -29
  65. data/spec/page_magic/element/locators_spec.rb +28 -25
  66. data/spec/page_magic/element/not_found_spec.rb +24 -0
  67. data/spec/page_magic/element/query/multiple_results_spec.rb +14 -0
  68. data/spec/page_magic/element/query/single_result_spec.rb +21 -0
  69. data/spec/page_magic/element/query_spec.rb +26 -45
  70. data/spec/page_magic/element/selector_spec.rb +120 -110
  71. data/spec/page_magic/element_context_spec.rb +47 -87
  72. data/spec/page_magic/element_definition_builder_spec.rb +14 -71
  73. data/spec/page_magic/element_spec.rb +256 -0
  74. data/spec/page_magic/elements/config_spec.rb +203 -0
  75. data/spec/page_magic/elements_spec.rb +90 -134
  76. data/spec/page_magic/instance_methods_spec.rb +65 -63
  77. data/spec/page_magic/mapping_spec.rb +181 -0
  78. data/spec/page_magic/session_methods_spec.rb +29 -25
  79. data/spec/page_magic/session_spec.rb +109 -199
  80. data/spec/page_magic/transitions_spec.rb +43 -0
  81. data/spec/page_magic/utils/string_spec.rb +29 -0
  82. data/spec/page_magic/utils/url_spec.rb +9 -0
  83. data/spec/page_magic/wait_methods_spec.rb +16 -22
  84. data/spec/page_magic/watcher_spec.rb +22 -0
  85. data/spec/page_magic/watchers_spec.rb +58 -62
  86. data/spec/page_magic_spec.rb +37 -29
  87. data/spec/spec_helper.rb +9 -2
  88. data/spec/support/shared_contexts.rb +3 -1
  89. data/spec/support/shared_examples.rb +17 -17
  90. metadata +101 -48
  91. data/lib/page_magic/element/query_builder.rb +0 -48
  92. data/lib/page_magic/element/selector_methods.rb +0 -13
  93. data/lib/page_magic/matcher.rb +0 -121
  94. data/spec/element_spec.rb +0 -249
  95. data/spec/page_magic/element/query_builder_spec.rb +0 -108
  96. data/spec/page_magic/matcher_spec.rb +0 -336
  97. data/spec/support/shared_contexts/files_context.rb +0 -7
  98. data/spec/support/shared_contexts/nested_elements_html_context.rb +0 -16
  99. data/spec/support/shared_contexts/rack_application_context.rb +0 -9
  100. data/spec/support/shared_contexts/webapp_fixture_context.rb +0 -39
  101. data/spec/watcher_spec.rb +0 -61
@@ -1,7 +0,0 @@
1
- shared_context :files do
2
- require 'tmpdir'
3
-
4
- def scratch_dir
5
- @dir ||= Dir.mktmpdir
6
- end
7
- end
@@ -1,16 +0,0 @@
1
- shared_context :nested_elements_html do
2
- require 'sinatra/base'
3
-
4
- let(:nested_elements_html) do
5
- <<-HTML
6
- <div id="parent">
7
- <div id="child">
8
- </div>
9
- </div>
10
- HTML
11
- end
12
-
13
- let(:nested_elements_node) do
14
- Capybara::Node::Simple.new(nested_elements_html)
15
- end
16
- end
@@ -1,9 +0,0 @@
1
- shared_context :rack_application do
2
- let(:rack_application) do
3
- Class.new do
4
- def call(_env)
5
- [200, {}, ['hello world!!']]
6
- end
7
- end
8
- end
9
- end
@@ -1,39 +0,0 @@
1
- shared_context :webapp_fixture do
2
- require 'sinatra/base'
3
-
4
- let(:rack_app) do
5
- Class.new(Sinatra::Base) do
6
- get '/page1' do
7
- "<html><head><title>page1</title></head><body><a href='/page2'>next page</a></body></html>"
8
- end
9
-
10
- get '/page2' do
11
- 'page 2 content'
12
- end
13
-
14
- get '/elements' do
15
- <<-ELEMENTS
16
- <a href='#'>a link</a>
17
-
18
-
19
- <div id='form' class="form">
20
- <a id='form_link' href='/page2'>link in a form</a>
21
- <label>enter text
22
- <input id='field_id' name='field_name' class='input_class' type='text' value='filled in'/>
23
- </label>
24
- <button id='form_button' type='submit' value='a button'/>
25
- </form>
26
-
27
- ELEMENTS
28
- end
29
- end
30
- end
31
-
32
- before :each do
33
- Capybara.app = rack_app
34
- end
35
-
36
- after do
37
- Capybara.reset!
38
- end
39
- end
data/spec/watcher_spec.rb DELETED
@@ -1,61 +0,0 @@
1
- module PageMagic
2
- describe Watcher do
3
- describe '#initialize' do
4
- context 'check has not been called yet' do
5
- subject do
6
- described_class.new(:custom_watcher)
7
- end
8
- it 'it sets last to nil' do
9
- expect(subject.last).to be_nil
10
- end
11
- end
12
- end
13
-
14
- describe '#check' do
15
- context 'method supplied to constructor' do
16
- subject do
17
- described_class.new(:object_id)
18
- end
19
-
20
- it 'assigns last to be the result of calling the method' do
21
- subject.check(self)
22
- expect(subject.last).to eq(object_id)
23
- end
24
- end
25
- context 'name and attribute supplied to constructor' do
26
- subject do
27
- described_class.new(:my_button, :text)
28
- end
29
-
30
- it 'assigns last to the value of attribute definined in the constructor' do
31
- browser_element = double(text: :hello)
32
- page_element = double(my_button: browser_element)
33
- expect(subject.check(page_element).last).to eq(:hello)
34
- end
35
- end
36
-
37
- context 'block supplied to constructor' do
38
- def method_on_self(value = nil)
39
- return @value unless value
40
- @value = value
41
- end
42
-
43
- subject do
44
- described_class.new(:custom_watcher) do
45
- method_on_self(:called)
46
- :result
47
- end
48
- end
49
-
50
- it 'is called on self' do
51
- subject.check(self)
52
- expect(method_on_self).to be(:called)
53
- end
54
-
55
- it 'assigns last to the resut of the block' do
56
- expect(subject.check(self).last).to eq(:result)
57
- end
58
- end
59
- end
60
- end
61
- end