locatine 0.02653 → 0.02710

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d99cd5d5712f3b8c2e5ee842d747cabe50389989ae74ee3cfa2e7c7c053459bb
4
- data.tar.gz: 5887791f4997688df39acfab6d5bb9e15827e77b970643a9e6fd63afa9947e57
3
+ metadata.gz: 56487180200c449f68c037e000f60aa54165623f2fa8ccfab887d8756c7e848c
4
+ data.tar.gz: 8cc1c4a8edffdc0bab1dc2ca4f32038f106412a3bc4864d11547bc27ddcf091e
5
5
  SHA512:
6
- metadata.gz: fbd537352c05d38f9b4a2f8ebaee26c1e83d787071593caaa1a72bce8be60c41b36c2d869923d633bfb3851e26497b63f453c15e69fac4725986d8207cea03a7
7
- data.tar.gz: 11f6d7403fb9eed905255a1c4d1eee477a2ea220d867d0a4d7ce09a9a0b50b081daf59f21cb92dbffcbe4dd4e31ca76ef01e3234e66353ee203a1007b8cc4685
6
+ metadata.gz: edb0be42a2a0b1d624a53975cf0ace45688df57b20b8e75bfaf6eca1c1adf992a64848b94ef984517ca8de8f14856c6795738b0ef14c4b5928727b11b91da595
7
+ data.tar.gz: e20848ead9b6346734b19062568d70025d579f314773fed3ee66c2104732c83c30dce86f1b0e0101df51b5831ffbae4fa79b5b048ee9688f17416bc8a84486e8
data/README.md CHANGED
@@ -14,7 +14,7 @@ That's it.
14
14
 
15
15
  ## Stage of development:
16
16
 
17
- Version of Locatine is **0.02653**. This is the 1st version since redesign. Next 5-15 versions will be about bug fixing and minor tweaks.
17
+ Version of Locatine is **0.02710**. The 3rd version since rewriting. 10-15 next versions is dedicated to bug fixing, tweaking.
18
18
 
19
19
  ## Attention
20
20
 
@@ -7,6 +7,10 @@ module Locatine
7
7
  attr_accessor :answer
8
8
 
9
9
  def initialize(session, element_code)
10
+ unless element_code
11
+ raise ArgumentError, 'Cannot init element with no element data'
12
+ end
13
+
10
14
  @session = session
11
15
  @answer = element_code
12
16
  end
@@ -28,12 +28,17 @@ module Locatine
28
28
  classic = classic_thread
29
29
  magic = magic_thread
30
30
  sleep 0.1 while timer && !similar?
31
- classic.kill
32
- magic.kill
31
+ kill_join(classic)
32
+ kill_join(magic)
33
33
  normalize_indexes(magic['out']) if empty? && (magic['out'].to_h != {})
34
34
  self
35
35
  end
36
36
 
37
+ def kill_join(thread)
38
+ thread.kill
39
+ thread.join
40
+ end
41
+
37
42
  def magic_routine(data)
38
43
  Thread.current['out'] = {}
39
44
  page = @session.page
@@ -54,14 +59,21 @@ module Locatine
54
59
  end
55
60
 
56
61
  def magic_find(data = known)
62
+ @everything = all_elements
57
63
  magic_routine(data)
58
64
  normalize_indexes
59
65
  end
60
66
 
61
- def normalize_indexes(indexes = Thread.current['out'])
67
+ def all_elements
62
68
  all = { 'using' => 'tag name', 'value' => '*' }
63
69
  list = @session.api_request('/elements', 'Post', all.to_json).body
64
- list = JSON.parse(list)['value']
70
+ JSON.parse(list)['value']
71
+ end
72
+
73
+ def normalize_indexes(indexes = Thread.current['out'])
74
+ list = all_elements
75
+ return warn_unstable_page if list != @everything
76
+
65
77
  answers = max_indexes(indexes).map { |index| list[index.to_i] }
66
78
  answers.each do |item|
67
79
  push Locatine::Element.new(@session, item)
@@ -60,6 +60,11 @@ module Locatine
60
60
  return true if tolerance == 100
61
61
 
62
62
  count_similarity
63
+ rescue RuntimeError => e
64
+ raise e.message unless e.message == 'stale element reference'
65
+
66
+ warn_unstable_page
67
+ false
63
68
  end
64
69
 
65
70
  def similar_enough(same, all)
@@ -64,9 +64,9 @@ module Locatine
64
64
 
65
65
  def execute_script(script, *args)
66
66
  args.map! { |item| item.class == Locatine::Element ? item.answer : item }
67
- value = JSON.parse(api_request('/execute/sync', 'Post',
68
- { script: script, args: args }
69
- .to_json).body)['value']
67
+ response = api_request('/execute/sync', 'Post',
68
+ { script: script, args: args }.to_json).body
69
+ value = JSON.parse(response, max_nesting: false)['value']
70
70
  error_present = (value.class == Hash) && value['error']
71
71
  raise_script_error(script, args, value) if error_present
72
72
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Locatine
4
4
  # constants here...
5
- VERSION = '0.02653'
5
+ VERSION = '0.02710'
6
6
  NAME = 'locatine'
7
7
  HOME = if File.readable?("#{Dir.pwd}/lib/#{Locatine::NAME}")
8
8
  "#{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.02653'
4
+ version: '0.02710'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergei Seleznev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-02 00:00:00.000000000 Z
11
+ date: 2020-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler