locatine 0.02058 → 0.02247

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: 839233263a07aac6fda720392d0dbd920a5a9660
4
- data.tar.gz: b60a4fdc5d93b96abb65b49c128302eb73d5a9b6
3
+ metadata.gz: 023773fde5af096ee6f8b04948dbeadcee35f3d2
4
+ data.tar.gz: 2071bcae7bf758afc1196a82f04f74690931f9c0
5
5
  SHA512:
6
- metadata.gz: f6279a2237def4ac7799e8a1ed6f3d293251d92ad7e2a62e13fd98ac22b05c2d4bccaabd4be19cf9de97f27a28a98916d784236af6240109ccb61323481dd7be
7
- data.tar.gz: f1f87a3f394b2091d0391e53e3844067e6c929d51dfc68e2d526a0dd44dd588ce293752044e9c27602997f3d9b2d43c27e1fb657683387761079fae9b81d5f65
6
+ metadata.gz: c3c8e5959c2fd4b850608ee0d998357c32ce9af253e6726c3077f6eafeeef4625a85fa0e5c70f10564d14c1d46756efe61a9823f4e68f2ac37dd5000d008d1bb
7
+ data.tar.gz: 99f44eb1de8f7158f8b108edc971c2682322fc2fb60db7e2729da318a73729e21f1dece359616bdfd14e9703a8277b6372c968cac73725fd82e930a85d61fa80
data/README.md CHANGED
@@ -16,7 +16,7 @@ That's it.
16
16
 
17
17
  ## Stage of development:
18
18
 
19
- Version of Locatine is **0.02058** only. It means so far this is an alfa. You can use it in a real project if you are a risky person.
19
+ Version of Locatine is **0.02247** only. It means so far this is an alfa. You can use it in a real project if you are a risky person.
20
20
 
21
21
  ## Installation
22
22
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Locatine app",
3
- "version": "0.02058",
3
+ "version": "0.02247",
4
4
  "description": "Messaging from browser to main app",
5
5
  "devtools_page": "devtools.html",
6
6
  "permissions": ["activeTab", "storage", "contextMenus", "tabs"],
@@ -18,50 +18,6 @@ module Locatine
18
18
  return element, attributes
19
19
  end
20
20
 
21
- def add_selected_attributes(new_attributes, attributes)
22
- if get_from_app('locatinecollection') == 'true'
23
- get_commons(new_attributes, attributes.to_h)
24
- else
25
- new_attributes
26
- end
27
- end
28
-
29
- def selected_element_attributes(tag, index, vars)
30
- generate_data([engine.elements(tag_name: tag)[index]], vars).to_h
31
- end
32
-
33
- def selected_element(tag, index, vars, attributes)
34
- new_attributes = selected_element_attributes(tag, index, vars)
35
- new_attributes = add_selected_attributes(new_attributes, attributes)
36
- element = find_by_data(new_attributes, vars)
37
- return element, new_attributes
38
- end
39
-
40
- def working_on_selected(tag, index, vars, attributes)
41
- send_working(tag, index)
42
- element, new_attributes = selected_element(tag, index, vars, attributes)
43
- warn_dropping(tag, index) unless element
44
-
45
- warn_type(tag) if @type && !element
46
-
47
- return_selected(element, attributes, new_attributes, vars)
48
- end
49
-
50
- def return_old_selection(attrs, vars)
51
- return find_by_data(attrs, vars).to_a, attrs.to_h if attrs.to_h != {}
52
-
53
- return nil, {}
54
- end
55
-
56
- def return_selected(element, attributes, new_attributes, vars)
57
- if !element && new_attributes.to_h != {}
58
- send_lost
59
- return return_old_selection(attributes, vars)
60
-
61
- end
62
- return element, new_attributes
63
- end
64
-
65
21
  def what_was_selected(element, attributes, vars)
66
22
  tag, index = tag_index
67
23
  send_to_app('locatineconfirmed', 'ok')
@@ -0,0 +1,80 @@
1
+ module Locatine
2
+ module ForSearch
3
+ ##
4
+ # Cooking element data for dialog
5
+ module ElementSelection
6
+ private
7
+
8
+ def add_selected_attributes(new_attributes, attributes)
9
+ if get_from_app('locatinecollection') == 'true'
10
+ get_commons(new_attributes, attributes.to_h)
11
+ else
12
+ new_attributes
13
+ end
14
+ end
15
+
16
+ def simple_attrs(tag, index, vars)
17
+ element = engine.elements(tag_name: tag)[index]
18
+ attrs = generate_data([element], vars).to_h
19
+ return element, attrs
20
+ end
21
+
22
+ def negative_needed(element, vars, old_depth)
23
+ @depth = old_depth
24
+ warn_no_negatives
25
+ generate_data([element], vars).to_h
26
+ end
27
+
28
+ def complex_attrs(element, vars, old_depth = @depth)
29
+ attrs = get_family_info(element, vars).to_h
30
+ return negative_needed(element, vars, old_depth) if attrs.length < @depth
31
+
32
+ if find_by_data(attrs, vars).length > 1
33
+ @depth +=1
34
+ return complex_attrs(element, vars, old_depth)
35
+ end
36
+ @depth = old_depth
37
+ attrs
38
+ end
39
+
40
+ def selected_element_attributes(tag, index, vars)
41
+ element, attrs = simple_attrs(tag, index, vars)
42
+ length = find_by_data(attrs, vars).to_a.length
43
+ attrs = complex_attrs(element, vars) if length > 1
44
+ attrs
45
+ end
46
+
47
+ def selected_element(tag, index, vars, attributes)
48
+ new_attributes = selected_element_attributes(tag, index, vars)
49
+ new_attributes = add_selected_attributes(new_attributes, attributes)
50
+ element = find_by_data(new_attributes, vars)
51
+ return element, new_attributes
52
+ end
53
+
54
+ def working_on_selected(tag, index, vars, attributes)
55
+ send_working(tag, index)
56
+ element, new_attributes = selected_element(tag, index, vars, attributes)
57
+ warn_dropping(tag, index) unless element
58
+
59
+ warn_type(tag) if @type && !element
60
+
61
+ return_selected(element, attributes, new_attributes, vars)
62
+ end
63
+
64
+ def return_old_selection(attrs, vars)
65
+ return find_by_data(attrs, vars).to_a, attrs.to_h if attrs.to_h != {}
66
+
67
+ return nil, {}
68
+ end
69
+
70
+ def return_selected(element, attributes, new_attributes, vars)
71
+ if !element && new_attributes.to_h != {}
72
+ send_lost
73
+ return return_old_selection(attributes, vars)
74
+
75
+ end
76
+ return element, new_attributes
77
+ end
78
+ end
79
+ end
80
+ end
@@ -35,6 +35,7 @@ module Locatine
35
35
  # Setting stability
36
36
  def set_stability(first, second)
37
37
  second = first if second.to_h == {}
38
+ first = second.merge first
38
39
  final = Hash.new { |hash, key| hash[key] = [] }
39
40
  first.each_pair do |depth, array|
40
41
  final[depth] = same_entries(array, second, depth, true).uniq
@@ -27,7 +27,7 @@ module Locatine
27
27
  ##
28
28
  # We can highlight\unhighlight tons of elements at once
29
29
  def mass_highlight_turn(mass, turn_on = true)
30
- warn_much_highlight if turn_on && mass.length > 50
30
+ warn_much_highlight(mass.length) if turn_on && mass.length > 50
31
31
  mass[0..49].each do |element|
32
32
  if turn_on
33
33
  highlight element
@@ -16,7 +16,8 @@ module Locatine
16
16
  def same_entries(array, second, depth, stability_up = false)
17
17
  result = []
18
18
  array.each do |hash|
19
- to_add = select_same(second[depth], hash)
19
+ item = second[depth]
20
+ to_add = item.nil? ? [] : select_same(second[depth], hash)
20
21
  to_add = stability_bump(to_add, hash) if stability_up
21
22
  result += to_add
22
23
  end
@@ -146,7 +146,19 @@ module Locatine
146
146
  end
147
147
 
148
148
  def warn_not_found(name, scope)
149
- "Locatine cannot find element #{name} in #{scope}"
149
+ send_warn "Locatine cannot find element #{name} in #{scope}"
150
+ end
151
+
152
+ def warn_totally_same(how_deep)
153
+ send_warn('There are more than one elements with totally similar'\
154
+ " attributes. Custom depth for element is set to #{how_deep}.")
155
+ end
156
+
157
+ def warn_no_negatives
158
+ send_warn 'The only way to find the selected element is to use'\
159
+ " negative expression like //*[not(@id='something')]. Locatine does"\
160
+ ' not support it. So you must to provide for element a custom locator.'\
161
+ ' Or find it as a part of collection and than return it by index'
150
162
  end
151
163
 
152
164
  def raise_not_found(name, scope)
@@ -1,7 +1,7 @@
1
1
  require 'watir'
2
2
  require 'json'
3
3
  require 'fileutils'
4
- require 'chromedriver-helper'
4
+ require 'webdrivers'
5
5
 
6
6
  # Internal requires
7
7
  require 'locatine/for_search/merge'
@@ -21,6 +21,7 @@ require 'locatine/for_search/find_by_guess'
21
21
  require 'locatine/for_search/data_generate'
22
22
  require 'locatine/for_search/xpath_generator'
23
23
  require 'locatine/for_search/find_by_locator'
24
+ require 'locatine/for_search/element_selection'
24
25
 
25
26
  module Locatine
26
27
  ##
@@ -45,6 +46,7 @@ module Locatine
45
46
  include Locatine::ForSearch::DataGenerate
46
47
  include Locatine::ForSearch::FindByLocator
47
48
  include Locatine::ForSearch::XpathGenerator
49
+ include Locatine::ForSearch::ElementSelection
48
50
 
49
51
  attr_accessor :data,
50
52
  :depth,
@@ -1,6 +1,6 @@
1
1
  module Locatine
2
2
  # constants here...
3
- VERSION = '0.02058'.freeze
3
+ VERSION = '0.02247'.freeze
4
4
  NAME = 'locatine'.freeze
5
5
  HOME = if File.readable?("#{Dir.pwd}/lib/#{Locatine::NAME}")
6
6
  "#{Dir.pwd}/lib/#{Locatine::NAME}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locatine
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.02058'
4
+ version: '0.02247'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergei Seleznev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-23 00:00:00.000000000 Z
11
+ date: 2019-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,19 +95,25 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '2.0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: chromedriver-helper
98
+ name: webdrivers
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '2.0'
103
+ version: '3.8'
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 3.8.0
104
107
  type: :runtime
105
108
  prerelease: false
106
109
  version_requirements: !ruby/object:Gem::Requirement
107
110
  requirements:
108
111
  - - "~>"
109
112
  - !ruby/object:Gem::Version
110
- version: '2.0'
113
+ version: '3.8'
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 3.8.0
111
117
  description: The main goal to write locators never
112
118
  email: s_seleznev_qa@hotmail.com
113
119
  executables: []
@@ -129,6 +135,7 @@ files:
129
135
  - lib/locatine/for_search/data_generate.rb
130
136
  - lib/locatine/for_search/data_logic.rb
131
137
  - lib/locatine/for_search/dialog_logic.rb
138
+ - lib/locatine/for_search/element_selection.rb
132
139
  - lib/locatine/for_search/file_work.rb
133
140
  - lib/locatine/for_search/find_by_css.rb
134
141
  - lib/locatine/for_search/find_by_guess.rb