browza 0.0.3.2 → 0.0.3.3

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
  SHA1:
3
- metadata.gz: f9bbb2cb8b63686053e0a6c6b2c180b2a7b1f796
4
- data.tar.gz: a39e391c9341eea3ae9ff543cef056ff621b452d
3
+ metadata.gz: fd61a969dc11056dbb1109fc1ef5ee41cc4e7d34
4
+ data.tar.gz: 89e6c7133d312ecb9bc9d4e44abdd61aea4d38d5
5
5
  SHA512:
6
- metadata.gz: 482d4cd6544d3b237aefc22c5a380ca89e99e758c1728bc428ab5d61f2257c720f174388fce41300d1ab4c00f0755c41502eeef955f5613a8f66a5d083d2309b
7
- data.tar.gz: 2df0b8177a5870abfa50cb9f2a73f2521f89069e679f6fd09b042199ef331c463792e4ac3fea2543cc6d2705204a64401409f312572c9d8c7dfc4c0b0977832e
6
+ metadata.gz: 1b5c35e769e9dd79688810167814f5e2f3ec2d1d5691e7be15b0466647d42c0556ee3792bac2f1c9932296104a436a3dffbc7faa36c07934e4ccc03fd30f8e20
7
+ data.tar.gz: 194681b280cd0e17e5a490f149344b715ad0d65cea21cf183289c93b3eec813a058553f0d2246b58bd9f53f47ba6a406da215ca99591398c4a14f4c39be08b2e
data/examples/ex1.rb CHANGED
@@ -8,16 +8,23 @@ puts "Creating Chrome Browser!"
8
8
 
9
9
 
10
10
  ENV['SELENIUM_BROWSER']='firefox'
11
- Browza::Manager.instance.createBrowser()
11
+ ENV['SELENIUM_PLATFORM']='local'
12
+ Browza::Manager.instance.start
13
+
14
+ Browza::Manager.instance.addModel('./model.json')
15
+
16
+ #Browza::Manager.instance.createBrowser()
12
17
 
13
18
 
14
19
  puts "Navigate to playground"
15
20
  Browza::Manager.instance.navigate('https://stark-bastion-95510.herokuapp.com/playground')
16
21
 
17
- Browza::Manager.instance.click("//button[text()='Van Halen']")
22
+ #Browza::Manager.instance.click("//button[text()='Van Halen']")
23
+ Browza::Manager.instance.click("page(exPage).get(vh)")
18
24
 
19
- Browza::Manager.instance.highlight("//button[text()='Van Halen']", 'red')
20
25
 
26
+ #Browza::Manager.instance.highlight("//button[text()='Van Halen']", 'red')
27
+ Browza::Manager.instance.highlight("page(exPage).get(vh)", 'red')
21
28
 
22
29
  puts "PRESS ENTER to Continue .."
23
30
  STDIN.gets
@@ -236,6 +236,8 @@ class Manager
236
236
 
237
237
  def createBrowser(*p)
238
238
 
239
+ timeout = nil
240
+
239
241
  if ENV['SELENIUM_RESOLUTION']
240
242
  @logger.debug " SELENIUM_RESOLUTION=#{ENV['SELENIUM_RESOLUTION']}" if @debug
241
243
  _width = ENV['SELENIUM_RESOLUTION'].match(/\s*(\d+)\s*x\s*(\d+)\s*$/)[1].to_s
@@ -281,6 +283,10 @@ class Manager
281
283
  _height = h[:height]
282
284
  end
283
285
 
286
+ if h.has_key?(:timeout)
287
+ timeout = h[:timeout]
288
+ end
289
+
284
290
  if h.has_key?(:id)
285
291
  _id = h[:id]
286
292
  end
@@ -316,7 +322,17 @@ class Manager
316
322
  @logger.debug "Selenium::WebDriver.for #{@browserType} (isSymbol: #{@browserType.is_a?(Symbol)})" if @debug
317
323
 
318
324
  begin
319
- @drv = Selenium::WebDriver.for @browserType
325
+ if timeout.nil?
326
+ @drv = Selenium::WebDriver.for @browserType
327
+ else
328
+ client = Selenium::WebDriver::Remote::Http::Default.new
329
+ client.read_timeout = timeout.to_i
330
+
331
+ @drv = Selenium::WebDriver.for @browserType, http_client: client
332
+
333
+ puts __FILE__ + (__LINE__).to_s + " Set NET::TIMEOUT to #{timeout.to_s}"
334
+ end
335
+
320
336
  rescue TypeError
321
337
  @logger.warn __FILE__ + (__LINE__).to_s + " See https://github.com/mozilla/geckodriver/issues/676" if @browserType == :firefox
322
338
  end
@@ -411,6 +427,7 @@ class Manager
411
427
 
412
428
  def goto(url, id=nil)
413
429
 
430
+ @logger.debug __FILE__ + (__LINE__).to_s + " goto(#{url})"
414
431
  rc = false
415
432
 
416
433
  if id.nil?
@@ -434,6 +451,7 @@ class Manager
434
451
 
435
452
  if p.is_a?(Array)
436
453
  if p.length == 1
454
+ @logger.debug __FILE__ + (__LINE__).to_s + " navigate(#{p[0].to_s}"
437
455
  rc = goto(p[0].to_s)
438
456
  elsif p.length == 2
439
457
  rc = goto(p[0], p[1])
@@ -788,27 +806,86 @@ class Manager
788
806
  return @driverList[0][:drv].execute_script('var s = new Date().toString(); return s')
789
807
  end
790
808
 
809
+
810
+ def text(_locator, _drv = nil, _timeout = 30)
811
+ rc = nil
812
+
813
+ 2.times { |i|
814
+
815
+ @driverList.each do |b|
816
+ begin
817
+
818
+ drv = b[:drv]
819
+ obj = nil
820
+ drv.switch_to.default_content
821
+ isDisplayed = Selenium::WebDriver::Wait.new(timeout: _timeout).until {
822
+ obj = findLocator(_locator, drv)
823
+ obj.is_a?(Selenium::WebDriver::Element) && obj.displayed? && obj.enabled?
824
+ }
825
+ if !obj.nil? && isDisplayed && obj.is_a?(Selenium::WebDriver::Element)
826
+ @logger.debug __FILE__ + (__LINE__).to_s + " clicked #{_locator}"
827
+ rc = obj.text
828
+ end
829
+
830
+ break
831
+
832
+
833
+ rescue Selenium::WebDriver::Error::TimeOutError
834
+ puts __FILE__ + (__LINE__).to_s + " retry: #{i} locator:#{_locator}"
835
+
836
+ rescue => ex
837
+ puts __FILE__ + (__LINE__).to_s + " #{ex.class}"
838
+ puts "#{ex.class}"
839
+ puts "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
840
+ end
841
+ end
842
+ }
843
+
844
+ rc
845
+ end
846
+
847
+
848
+ def _getActionableElement(_locator, drv, _timeout = 30)
849
+ obj = nil
850
+ begin
851
+ drv.switch_to.default_content
852
+
853
+ isDisplayed = Selenium::WebDriver::Wait.new(timeout: _timeout).until {
854
+ obj = findLocator(_locator, drv)
855
+ obj.is_a?(Selenium::WebDriver::Element) && obj.displayed? && obj.enabled?
856
+ }
857
+
858
+ rescue Selenium::WebDriver::Error::NoSuchElementError
859
+ ;
860
+
861
+ rescue Selenium::WebDriver::Error::TimeOutError
862
+ ;
863
+ end
864
+
865
+ obj
866
+ end
867
+
791
868
  ##
792
869
  # Browza.instance.click('page(sideNav).get(desktop)')
793
870
  ##
794
- def click(_locator, _drv=nil, _timeout=30)
871
+ def click(_locator, _drv=nil, _timeout = 30)
795
872
 
796
873
  @logger.debug __FILE__ + (__LINE__).to_s + " click(#{_locator})"
797
874
  rc = false
798
875
 
799
876
  @driverList.each do |b|
800
877
  begin
801
- drv=b[:drv]
802
-
878
+ drv = b[:drv]
803
879
  obj = nil
804
-
805
- # obj = findLocator(_locator, drv)
880
+ drv.switch_to.default_content
806
881
 
807
882
  isDisplayed = Selenium::WebDriver::Wait.new(timeout: _timeout).until {
808
883
  obj = findLocator(_locator, drv)
809
884
  obj.is_a?(Selenium::WebDriver::Element) && obj.displayed? && obj.enabled?
810
885
  }
811
886
 
887
+ # obj = _getActionableElement(_locator, drv, _timeout)
888
+
812
889
  # drv.action.move_to(obj).perform
813
890
  scrollElementIntoMiddle = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);" +
814
891
  "var elementTop = arguments[0].getBoundingClientRect().top;" +
@@ -821,13 +898,13 @@ class Manager
821
898
 
822
899
  @logger.debug __FILE__ + (__LINE__).to_s + " [click]: obj => #{obj.class} : #{isDisplayed}"
823
900
 
824
- if !obj.nil? && isDisplayed && obj.is_a?(Selenium::WebDriver::Element)
901
+ if !obj.nil? && obj.is_a?(Selenium::WebDriver::Element) && obj.displayed?
825
902
  @logger.debug __FILE__ + (__LINE__).to_s + " clicked #{_locator}"
826
903
  obj.click
827
904
  rc = true
828
905
  end
829
906
  rescue => ex
830
- @logger.debug __FILE__ + (__LINE__).to_s + " #{ex.class}"
907
+ @logger.debug __FILE__ + (__LINE__).to_s + " #{ex.class} : #{_locator}"
831
908
  @logger.debug "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
832
909
  end
833
910
  end
@@ -842,9 +919,15 @@ class Manager
842
919
 
843
920
  def highlight(_locator, color='red', _drv=nil, _timeout=30)
844
921
  rc = false
845
- rgb=nil
922
+ rgb = nil
923
+ obj = nil
924
+
925
+ if _locator.is_a?(Selenium::WebDriver::Element)
926
+ obj = _locator
927
+ else
928
+ obj = findLocator(_locator)
929
+ end
846
930
 
847
- obj = findLocator(_locator)
848
931
  if !obj.nil?
849
932
  if color.match(/\s*blue/i)
850
933
  rgb='rgb(0, 0, 255)'
@@ -898,7 +981,13 @@ class Manager
898
981
  rc = false
899
982
 
900
983
  # obj = getElement(findLocator(_locator), _drv, _timeout)
901
- obj = findLocator(_locator)
984
+
985
+ if _locator.match(/(active|focused)/i)
986
+ obj = @drv.switch_to.active_element
987
+ else
988
+ obj = findLocator(_locator)
989
+ end
990
+
902
991
  if !obj.nil?
903
992
 
904
993
  if _text.match(/\s*__CLEAR__\s*$/i)
@@ -931,12 +1020,78 @@ class Manager
931
1020
  rc
932
1021
  end
933
1022
 
1023
+ def type!(data)
1024
+ rc = { :length => nil, :comment => nil, :data => data }
1025
+
1026
+ drv = Browza::Manager.instance.getDriver()
1027
+
1028
+ if drv.is_a?(Selenium::WebDriver::Driver)
1029
+ obj = drv.switch_to.active_element
1030
+
1031
+ if obj.is_a?(Selenium::WebDriver::Element) && Browza::Manager.instance.isVisible?(obj)
1032
+
1033
+ Browza::Manager.instance.highlight(obj)
1034
+
1035
+ begin
1036
+ jsCmd = "hlt = function(c) { arguments[0].value = '#{data}'; }; return hlt(arguments[0]);"
1037
+ jsCmd = "return arguments[0].value = '#{data}'"
1038
+ puts __FILE__ + (__LINE__).to_s + " Data.lines : #{data.lines.count}"
1039
+ if data.lines.count > 1
1040
+ jsCmd = "return arguments[0].value = '#{data.gsub("\n", "\t")}'"
1041
+ end
1042
+ drv.execute_script(jsCmd, obj)
1043
+ rc[:length] = data.length
1044
+ rc[:comment] = 'JSDOM'
1045
+
1046
+ rescue Selenium::WebDriver::Error::JavascriptError
1047
+ Browza::Manager.instance.type('focused', data)
1048
+ rc[:comment] = 'Typed:JavaScriptError'
1049
+ rc[:length] = data.length
1050
+
1051
+ rescue Selenium::WebDriver::Error::UnknownError => ex
1052
+ puts "#{ex.class} : #{ex.message.to_s}"
1053
+
1054
+ if ex.message.to_s.match(/SyntaxError: Invalid or unexpected token/)
1055
+ rc[:comment] = "execute_script::SyntaxError - unexpected token"
1056
+ puts __FILE__ + (__LINE__).to_s + " Invalid Cmd => #{jsCmd}"
1057
+ else
1058
+ rc[:comment] = ex.class.to_s
1059
+ puts "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
1060
+ puts "Data => #{data}";
1061
+ end
1062
+
1063
+ Browza::Manager.instance.type('focused', data)
1064
+
1065
+ rc[:length] = data.length
1066
+
1067
+
1068
+ end
1069
+
1070
+ end
1071
+ end
1072
+
1073
+ @logger.debug __FILE__ + (__LINE__).to_s + " type!(#{data}) : rc:#{rc}"
1074
+ rc
1075
+ end
1076
+
934
1077
 
1078
+ # TODO: Proper handling of _timeout, instead of hack to globalize @defaultTimeout.
935
1079
  def isNotDisplayed?(_locator, _timeout=10)
936
- !displayed?(_locator, getDriver(), _timeout)
1080
+ rc = false
1081
+ _saveDefault = @defaultTimeout
1082
+
1083
+ @defaultTimeout = _timeout
1084
+ begin
1085
+ rc = !displayed?(_locator, getDriver(), _timeout)
1086
+ rescue => ex
1087
+ ;
1088
+ end
1089
+
1090
+ @defaultTimeout = _saveDefault
1091
+ rc
937
1092
  end
938
1093
 
939
- def displayed?(_locator, _drv=nil, _timeout=30)
1094
+ def displayed?(_locator, _drv=nil, _timeout = 30)
940
1095
  obj = findLocator(_locator)
941
1096
  obj.is_a?(Selenium::WebDriver::Element) && obj.displayed?
942
1097
  end
@@ -991,10 +1146,22 @@ class Manager
991
1146
 
992
1147
  def isVisible?(_locator, expected = true, _timeout = 30)
993
1148
  obj = nil
994
- rc = Selenium::WebDriver::Wait.new(timeout: _timeout).until {
995
- obj = findLocator(_locator, drv)
996
- obj.is_a?(Selenium::WebDriver::Element) && obj.displayed?
1149
+
1150
+
1151
+ @drv.switch_to.default_content
1152
+
1153
+ if _locator.is_a?(Selenium::WebDriver::Element)
1154
+ obj = _locator
1155
+
1156
+ rc = Selenium::WebDriver::Wait.new(timeout: _timeout).until {
1157
+ obj.displayed?
1158
+ }
1159
+ else
1160
+ rc = Selenium::WebDriver::Wait.new(timeout: _timeout).until {
1161
+ obj = findLocator(_locator, @drv)
1162
+ obj.is_a?(Selenium::WebDriver::Element) && obj.displayed?
997
1163
  }
1164
+ end
998
1165
 
999
1166
  @logger.debug __FILE__ + (__LINE__).to_s + " isVisible?(#{_locator}) : #{rc}"
1000
1167
  rc == expected
@@ -1,3 +1,3 @@
1
1
  module Browza
2
- VERSION = "0.0.3.2"
2
+ VERSION = "0.0.3.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browza
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.2
4
+ version: 0.0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - H20Dragon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-05 00:00:00.000000000 Z
11
+ date: 2017-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler