browza 0.0.0 → 0.0.1

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: d4e2ba35ea280d9f075814d6d4f5526895aea294
4
- data.tar.gz: 73c6c6d7088863d85e1bc73fab50d1d48f91ab73
3
+ metadata.gz: a59afa3f589a1e3ae62e4382e47ad927303406e2
4
+ data.tar.gz: 766ea1a959259523a64282d24886ae9b57fe8774
5
5
  SHA512:
6
- metadata.gz: cc54cc4cd5d5f3d548b91335b529f1c677ec2e32415e7139a841a88541557ccfddb5c0cc8a6ab193384ec72b7545e192c28205647875d02e2123fe4593dc19a7
7
- data.tar.gz: 693583681e6fb46a325e52b1e8c2b8a3fbb4b907ac36db349dbae824a8494280d3abc5bda2eefb0e7142ed85d4062388033c0c7945607161eaf8b42897bce9a5
6
+ metadata.gz: 9e67e334582c6717ae08dfb179d64471a0f95cd74ce9e4311d98b34b11a6733f1780e650b87656567033c170fcf3fe45dc4d3fa1273f97fdba8959c8c4132bb9
7
+ data.tar.gz: afca6f6ee25601abd9ab7a85b3f6e4baf1cf70dca60f56b4c417c8a66355116d4b810de1e95b4924586ab75e42a14deaf110617318be0eb140454c3e359dc858
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in appmodel.gemspec
4
+ gemspec
5
+
6
+ gem 'appmodel'
7
+
8
+ # Require chromediver
9
+ gem 'chromedriver-helper'
10
+
11
+
12
+ gem 'logging'
13
+
14
+ gem 'require_relative'
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/browza.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'browza/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "browza"
8
+ spec.version = Browza::VERSION
9
+ spec.authors = ["H20Dragon"]
10
+ spec.email = ["h20dragon@outlook.com"]
11
+
12
+ spec.summary = %q{Lightweight Selenium Automation Framework - Command Based.}
13
+ spec.description = %q{Lightweight Selenium Automation Framework.}
14
+ spec.homepage = "http://github.com/h20dragon."
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.11"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rspec", "~> 3.0"
25
+ spec.add_development_dependency "appmodel"
26
+ spec.add_development_dependency "selenium-webdriver"
27
+ spec.add_development_dependency "logging"
28
+ end
@@ -0,0 +1,441 @@
1
+ require 'selenium-webdriver'
2
+ require 'singleton'
3
+ require 'appmodel'
4
+
5
+ module Browza
6
+
7
+ class Manager
8
+
9
+ include Singleton
10
+
11
+ attr_accessor :drv
12
+ attr_accessor :appModels
13
+ attr_accessor :browserType
14
+
15
+ def initialize
16
+ @appModels=[]
17
+ end
18
+
19
+ def addModel(_a)
20
+ puts __FILE__ + (__LINE__).to_s + " [addModel]: #{_a}"
21
+ @appModels << Appmodel::Model.new(_a)
22
+ end
23
+
24
+ # Set innerWidth and innerHeight
25
+ def setDimension(width=1035, height=768)
26
+ target_size = Selenium::WebDriver::Dimension.new(width, height)
27
+ getDriver().manage.window.size = target_size
28
+ end
29
+
30
+ def maximize()
31
+ getDriver().manage.window.maximize
32
+ end
33
+
34
+ def createBrowser(_type = :chrome)
35
+ @browserType = _type
36
+ @drv = Selenium::WebDriver.for @browserType
37
+ setDimension
38
+ end
39
+
40
+ def getDriver()
41
+ @drv
42
+ end
43
+
44
+ def quit()
45
+ getDriver().quit
46
+ end
47
+
48
+ def title()
49
+ getDriver().title.to_s
50
+ end
51
+
52
+ def isTitle?(regex)
53
+ current_title = getDriver().title
54
+ expected_title = Regexp.new(regex)
55
+ !expected_title.match(current_title).nil? || regex==current_title
56
+ end
57
+
58
+ def goto(url)
59
+ getDriver().navigate.to url
60
+ end
61
+
62
+ def navigate(url)
63
+ goto(url)
64
+ end
65
+
66
+ def _parseLocator(_locator)
67
+
68
+ locator = _locator
69
+ _by = :xpath
70
+
71
+ if _locator.is_a?(String)
72
+
73
+ if _locator.match(/^\s*(\/|\.)/i)
74
+ locator = { :xpath => _locator }
75
+ elsif _locator.match(/^\s*\#/i)
76
+ locator = { :css => _locator }
77
+ elsif _locator.match(/^\s*css\s*=\s*(.*)\s*$/)
78
+ locator = { :css => _locator.match(/^\s*css\s*=\s*(.*)$/)[1].to_s }
79
+ puts "LOCATOR.CSS => #{locator}"
80
+
81
+ end
82
+ end
83
+
84
+ locator
85
+
86
+ end
87
+
88
+ def getElements(_locator, drv=nil, _timeout=30)
89
+ rc=nil
90
+ begin
91
+
92
+ if drv.nil?
93
+ drv=getDriver()
94
+ end
95
+
96
+ Selenium::WebDriver::Wait.new(timeout: _timeout).until {
97
+ _obj = drv.find_elements(_parseLocator(_locator))
98
+
99
+ if !_obj.nil?
100
+ rc = _obj
101
+ end
102
+
103
+ !rc.nil?
104
+ }
105
+
106
+ rescue Selenium::WebDriver::Error::NoSuchElementError
107
+ puts __FILE__ + (__LINE__).to_s + " NoSuchElementError : #{_locator}"
108
+
109
+ rescue => ex
110
+ puts "Error during processing: #{$!}"
111
+ puts "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
112
+ end
113
+
114
+ rc
115
+ end
116
+
117
+
118
+
119
+ def getElement(_locator, drv=nil, _timeout=30)
120
+
121
+ puts __FILE__ + (__LINE__).to_s + " getElement(#{_locator})"
122
+ rc=nil
123
+ begin
124
+ locator = _parseLocator(_locator)
125
+
126
+
127
+ if drv.nil?
128
+ drv=getDriver()
129
+ end
130
+
131
+ Selenium::WebDriver::Wait.new(timeout: _timeout).until {
132
+ _obj = drv.find_element(locator)
133
+ if _obj.displayed?
134
+ rc = _obj
135
+ end
136
+
137
+ !rc.nil?
138
+ }
139
+
140
+ rescue Selenium::WebDriver::Error::NoSuchElementError
141
+ puts __FILE__ + (__LINE__).to_s + " NoSuchElementError : #{locator}"
142
+
143
+ rescue => ex
144
+ puts "Error during processing: #{$!}"
145
+ puts "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
146
+ end
147
+
148
+ rc
149
+ end
150
+
151
+ def isChrome?(drv=nil)
152
+ if drv.nil?
153
+ drv=@drv
154
+ end
155
+
156
+ !drv.browser.to_s.match(/chrome/i).nil?
157
+ end
158
+
159
+ def switch_into_frame(id)
160
+ drv = @drv
161
+ puts __FILE__ + (__LINE__).to_s + "== switch_into_frame(#{id})"
162
+ _fcnId=" [switch_into_frame]"
163
+ puts __FILE__ + (__LINE__).to_s + "#{_fcnId}: (#{id})"
164
+
165
+ hit=nil
166
+
167
+ if TestUtils.instance.isChrome?(drv)
168
+
169
+ puts __FILE__ + (__LINE__).to_s + "#{_fcnId}: switch on Chrome browser"
170
+ bframes = drv.find_elements(:xpath, '//iframe')
171
+
172
+ puts __FILE__ + (__LINE__).to_s + "#{_fcnId}: //iframe : size #{bframes.size}"
173
+
174
+ if bframes.size == 0
175
+ bframes = drv.find_elements(:xpath, '//frame')
176
+
177
+ puts __FILE__ + (__LINE__).to_s + "#{_fcnId}: //frame : #{bframes.size}"
178
+ end
179
+
180
+ for i in 0 .. bframes.size - 1
181
+ begin
182
+
183
+ _tag = bframes[i].attribute('name')
184
+
185
+ if !_tag.nil? && _tag.empty?
186
+ _tag = bframes[i].attribute('id')
187
+ end
188
+
189
+
190
+ puts __FILE__ + (__LINE__).to_s + "[switch_into_frame.chrome]: <tag, id> :: <#{_tag}, #{id} >"
191
+
192
+ if !_tag.empty? && id==_tag
193
+
194
+ hit = bframes[i]
195
+ drv.switch_to.frame hit
196
+
197
+ puts __FILE__ + (__LINE__).to_s + "#{_fcnId}: swtichframe to #{i} - #{_tag}"
198
+ break
199
+ end
200
+
201
+ rescue => ex
202
+ puts "Error during processing: #{$!}"
203
+ puts "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
204
+ end
205
+
206
+ end
207
+
208
+ else
209
+ # Firefox, IE
210
+ puts __FILE__ + (__LINE__).to_s + "#{_fcnId}: drv.switch_to.frame(#{id.to_s}";
211
+
212
+ hit = drv.switch_to.frame(id.to_s.strip)
213
+ end
214
+
215
+ puts __FILE__ + (__LINE__).to_s + " switch_into_frame(#{id}) => #{hit}"
216
+ hit
217
+ end
218
+
219
+
220
+ def switch_frame(e)
221
+
222
+ drv = @drv
223
+ puts __FILE__ + (__LINE__).to_s + "\n\n== self.switch_frame(#{e}) =="
224
+ frames=nil
225
+ if e.is_a?(Hash) && e.has_key?('page') && e['page'].has_key?('frames')
226
+ puts __FILE__ + (__LINE__).to_s + " frames => #{e['page']['frames']}";
227
+
228
+ frames=e['page']['frames']
229
+ elsif e.is_a?(String)
230
+ frames=e
231
+ end
232
+
233
+
234
+ if !frames.nil?
235
+ puts __FILE__ + (__LINE__).to_s + " [self.switch_frame]: frames => #{frames}";
236
+
237
+ # frame_list=frames.split(/(frame\(.*\))\.(?=[\w])/)
238
+ frame_list=frames.split(/\.(?=frame)/)
239
+
240
+ drv.switch_to.default_content
241
+
242
+ frame_list.each do |_f|
243
+ puts __FILE__ + (__LINE__).to_s + " processing #{_f}"
244
+
245
+ if !_f.empty?
246
+ _id = _f.match(/frame\((.*)\)/)[1]
247
+
248
+ puts __FILE__ + (__LINE__).to_s + " [self.switch_frame]: switch_to.frame #{_id}"
249
+
250
+ # Swtich based on browser type
251
+
252
+ if TestUtils.instance.isChrome?(drv)
253
+ if switch_into_frame(_id).nil?
254
+ puts __FILE__ + (__LINE__).to_s + " Frame with name/id #{_id} not found"
255
+ break
256
+ else
257
+ puts __FILE__ + (__LINE__).to_s + " Sucessfully switched frame into #{_id}"
258
+ end
259
+ else
260
+ puts __FILE__ + (__LINE__).to_s + " [firefox]: switch_to.frame #{_id}"
261
+ drv.switch_to.frame _id
262
+ end
263
+
264
+ if false
265
+
266
+ if drv.browser.to_s.match(/firefox/i)
267
+ puts __FILE__ + (__LINE__).to_s + " [firefox]: switch_to.frame #{_id}"
268
+ drv.switch_to.frame _id
269
+ else
270
+
271
+ if switch_into_frame(_id).nil?
272
+ puts __FILE__ + (__LINE__).to_s + " Frame with name/id #{_id} not found"
273
+ break
274
+ else
275
+ puts __FILE__ + (__LINE__).to_s + " Sucessfully switched frame into #{_id}"
276
+ end
277
+ end
278
+
279
+ end
280
+
281
+
282
+ end
283
+
284
+ end
285
+
286
+ end
287
+ end
288
+
289
+ def findLocator(_locator)
290
+ puts __FILE__ + (__LINE__).to_s + " [findLocator]: #{_locator} sz: #{@appModels.length}"
291
+ obj = nil
292
+ _hit = nil
293
+ if Appmodel::Model.isPageObject?(_locator) && @appModels.length > 0
294
+
295
+ i=0
296
+ @appModels.each do |m|
297
+ puts __FILE__ + (__LINE__).to_s + " >> #{i}. #{m.class} => #{_locator}"
298
+ begin
299
+ ##
300
+ # FRAMES
301
+ ##
302
+ pageObject = m.getPageElement(_locator)
303
+
304
+ puts __FILE__ + (__LINE__).to_s + " pageObject => #{pageObject}"
305
+
306
+ unless pageObject.nil?
307
+ _hit = {}
308
+ if pageObject.has_key?('frame')
309
+ _hit['frame'] = pageObject['frame']
310
+ end
311
+
312
+ if pageObject.has_key?('locator')
313
+ _hit['locator'] = Appmodel::Model.toBy(pageObject['locator'], m)
314
+ end
315
+
316
+ break
317
+ end
318
+
319
+ rescue => ex
320
+ puts "Error during processing: #{$!}"
321
+ puts "Backtrace:\n\t#{ex.backtrace.join("\n\t")}"
322
+ end
323
+ end
324
+ end
325
+
326
+ if _hit.is_a?(Hash)
327
+ if _hit.has_key?('frame')
328
+ puts __FILE__ + (__LINE__).to_s + "swtich_to_frame : #{_hit['frame']}"
329
+ switch_frame(_hit['frame'])
330
+ end
331
+
332
+ if _hit.has_key?('locator')
333
+ obj = getElement(_hit['locator'], @drv, 30)
334
+ end
335
+
336
+ else
337
+ obj = getElement(Appmodel::Model.toBy(_locator), @drv, 30)
338
+ end
339
+
340
+ puts __FILE__ + (__LINE__).to_s + " [return findLocator(#{_locator})] : #{_hit}"
341
+ _hit.nil? ? _locator : _hit
342
+
343
+ obj
344
+ end
345
+
346
+
347
+ ##
348
+ # TestUtils.instance.click('page(sideNav).get(desktop)')
349
+ ##
350
+ def click(_locator, _drv=nil, _timeout=30)
351
+ rc = false
352
+
353
+ # obj = getElement(findLocator(_locator), _drv, _timeout)
354
+ obj = findLocator(_locator)
355
+ if !obj.nil?
356
+ obj.click
357
+ rc=true
358
+ end
359
+
360
+ rc
361
+ end
362
+
363
+ def type(_locator, _text, _timeout=30)
364
+ rc = false
365
+
366
+ # obj = getElement(findLocator(_locator), _drv, _timeout)
367
+ obj = findLocator(_locator)
368
+ if !obj.nil?
369
+ obj.send_keys(_text)
370
+ rc=true
371
+ end
372
+
373
+ rc
374
+ end
375
+
376
+ def displayed?(_locator, _drv=nil, _timeout=30)
377
+ rc=false
378
+
379
+ # obj=getElement(findLocator(_locator), _drv, _timeout)
380
+ obj = findLocator(_locator)
381
+ if !obj.nil?
382
+ rc=obj.displayed?
383
+ end
384
+ rc
385
+ end
386
+
387
+ def focusedText()
388
+ activeElt = @drv.switch_to.active_element
389
+ activeElt.attribute('text')
390
+ end
391
+
392
+ def focusedValue()
393
+ activeElt = @drv.switch_to.active_element
394
+ activeElt.attribute('value')
395
+ end
396
+
397
+ def press(k, n=1)
398
+
399
+ n.times {
400
+ if k.match(/^\s*tab/i)
401
+ activeElt = @drv.switch_to.active_element
402
+ activeElt.send_keys(:tab)
403
+ elsif k.match(/^\s*clear\s*$/)
404
+ activeElt = @drv.switch_to.active_element
405
+ activeElt.clear
406
+ elsif k.match(/\s*^enter/i)
407
+ activeElt = @drv.switch_to.active_element
408
+ activeElt.send_keys(:enter)
409
+ elsif k.match(/\s*^down/i)
410
+ activeElt = @drv.switch_to.active_element
411
+ activeElt.send_keys(:arrow_down)
412
+ elsif k.match(/\s*^up/i)
413
+ activeElt = @drv.switch_to.active_element
414
+ activeElt.send_keys(:arrow_up)
415
+ else
416
+ break
417
+ end
418
+ }
419
+ end
420
+
421
+
422
+
423
+ def getCount(_locator, _drv=nil, _timeout=30)
424
+ rc=0
425
+ elts = getElements(_locator, _drv, _timeout)
426
+ if !elts.nil?
427
+
428
+ # hits = elts.select { |obj| obj.displayed? }
429
+
430
+ rc = elts.length
431
+ end
432
+
433
+ rc.to_i
434
+ end
435
+
436
+
437
+ end
438
+
439
+
440
+ end
441
+
@@ -0,0 +1,3 @@
1
+ module Browza
2
+ VERSION = "0.0.1"
3
+ end
data/lib/browza.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'browza/version'
2
+
3
+ module Browza
4
+ ROOT_DIR = File.join(File.dirname(File.expand_path(__FILE__)), 'browza').freeze
5
+
6
+ Dir["#{ROOT_DIR}/*.rb"].each { |f| require f }
7
+ Dir["#{ROOT_DIR}/**/*.rb"].each { |f| require f }
8
+ end
9
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browza
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - H20Dragon
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: selenium-webdriver
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: logging
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -87,7 +101,13 @@ executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
104
+ - Gemfile
90
105
  - README.md
106
+ - Rakefile
107
+ - browza.gemspec
108
+ - lib/browza.rb
109
+ - lib/browza/base/manager.rb
110
+ - lib/browza/version.rb
91
111
  homepage: http://github.com/h20dragon.
92
112
  licenses:
93
113
  - MIT