trail_selenium 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: eea59383bfc322831257ca3089d12e74b5bf6e78
4
+ data.tar.gz: 8e83e646f4ee9039256b6f626ffdd647f252d334
5
+ SHA512:
6
+ metadata.gz: f5126c01f00555e600fd33f1abc789a3e2bb5286f582e9c1278a55217043a4b7bebb601cec506fcf29c768332447b937f545310d130a28f16673f087814aa1f1
7
+ data.tar.gz: b5197a78d7fb27ed999c9b98ffb82423ffca0a41c17d84306845b1d09446894745edf0f9714e88a8eb1394e9cc31e4c7e0c5903a6945c1d97ff942df581a17bb
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in trail_selenium.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # TrailSelenium
2
+
3
+ ## Installation
4
+
5
+ Add this line to your application's Gemfile:
6
+
7
+ ```ruby
8
+ gem 'trail_selenium'
9
+ ```
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install trail_selenium
18
+
19
+ ## Usage
20
+
21
+ "http://www.trail4you.com/TechNote/Ruby/Trail_Selenium.doc/Trail_Selenium.html"
22
+
23
+ ## Development
24
+
25
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
26
+
27
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
28
+
29
+ ## Contributing
30
+
31
+ Bug reports and pull requests are welcome on GitHub at https://github.com/MtTrail/trail_selenium.
32
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "trail_selenium"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,396 @@
1
+ #! ruby -EWindows-31J
2
+ # -*- mode:ruby; coding:Windows-31J -*-
3
+
4
+ #= Trail4You Selenium�g�����W���[��
5
+ #
6
+ #
7
+ require "trail_selenium/version"
8
+
9
+
10
+ require 'rubygems'
11
+ require 'selenium-webdriver'
12
+ require 'trail_excel'
13
+ require 'win32/clipboard'
14
+ require 'fileutils'
15
+ require 'date'
16
+ require 'fastimage'
17
+ require 'uri'
18
+ require 'open-uri'
19
+ require 'openssl'
20
+
21
+ # SSL�ؖ����ŃG���[���N����̂�h���ׂɖ�������
22
+ # �ؖ����ɖ�肪������΃R�����g�A�E�g���Ă�������
23
+ #
24
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
25
+
26
+
27
+ # STDOUT.sync = true;
28
+
29
+
30
+ #-------------------------------------------------------------------
31
+
32
+ #= Trail_Selenium
33
+ #
34
+ #Authors:: Mt.Trail
35
+ #Version:: 1.0 2016/7/24 Mt.Trail
36
+ #Copyright:: Copyrigth (C) Mt.Trail 2016 All rights reserved.
37
+ #License:: GPL version 2
38
+ #
39
+ #==�ړI
40
+ # Selenium�Ńf�[�^���W���邽�߂̃N���X
41
+ #* Excel�N���X�����p����B
42
+ #* Windows�p�ł��B
43
+ #* �p�X��'/'��؂�ň����܂��B'\\'�ł͗L��܂���B
44
+ #
45
+ class Trail_Selenium
46
+ attr_accessor :driver,:wait
47
+ attr_accessor :report_book,:report_sheet,:report_line_no
48
+
49
+ #=== ������ wait����(�b)���w�肷��B
50
+ def initialize (wait_time = 10)
51
+ @driver = Selenium::WebDriver.for :firefox
52
+ @wait = Selenium::WebDriver::Wait.new(:timeout => wait_time) # seconds
53
+ @report_book = nil
54
+ @report_sheet = nil
55
+ @report_line_no = 1
56
+ end
57
+
58
+ #=== ���O�C��
59
+ # �����Őݒ�l�̔z��̔z���n���A��ԍŌ��submit�{�^���̏��(�ݒ�l�Ȃ�)
60
+ # �e�z��v�f�͉��L�̌`��
61
+ # [�������V���{��,�����̒l,�ݒ�l]�@���́@[:xpath, 'xpath�w��',�ݒ�l]
62
+ # �� : login([[:name,'UserName','LoginName'],[:name,'Password','password'],[:name,'Submit']])
63
+ #
64
+ def login (param)
65
+ param.each_with_index do |p,i|
66
+ if i < (param.size - 1)
67
+ @driver.find_element(p[0], p[1]).send_keys(p[2])
68
+ else
69
+ @driver.find_element(p[0], p[1]).click
70
+ end
71
+ end
72
+ end
73
+
74
+
75
+ #-------------------------------------------------------------------
76
+
77
+ #=== �f�[�^�������ݗp��Excel���w��
78
+ # target : open����Excel�t�@�C���̃p�X
79
+ # tenplate : �e���v���[�g��excel�t�@�C���̃p�X�A�����target�ɃR�s�[���Ă���open����B
80
+ #
81
+ # �e���v���[�g���w�肷��Ƃ�����R�s�[���Ďg�p����B
82
+ # �u���b�N�ŏ������e���󂯎��
83
+ #
84
+ def open_excel (target,tenplate = '')
85
+ @target_excel = target
86
+
87
+ if tenplate != ''
88
+ FileUtils.cp( tenplate, @target_excel)
89
+ end
90
+
91
+ openExcelWorkbook(@target_excel) do |book|
92
+ @report_book = book
93
+ yield book
94
+ end
95
+ end
96
+
97
+ #-------------------------------------------------------------------
98
+
99
+ #=== Excel�V�[�g�̃I�[�v��
100
+ # book : open���ꂽexcel�I�u�W�F�N�g
101
+ # sheet_name : �V�[�g�ԍ��܂��̓V�[�g��
102
+ #
103
+ # �u�b�N�ƃV�[�g�����w�肷��B
104
+ # �V�[�g�������l�̏ꍇ�V�[�g�̔ԍ��ƌ��Ȃ����
105
+ # Excel�̃V�[�g�I�u�W�F�N�g��Ԃ�
106
+ #
107
+ # ��
108
+ # ts = Trail_Selenium.new
109
+ # ts.open_excel('report.xls','report_tenplate.xls') do |book|
110
+ # sheet = open_report_sheet(book,'Report_Sheet')
111
+ # :
112
+ # book.save
113
+ # end
114
+ #
115
+ def open_sheet( book, sheet_name )
116
+ sheet = book.Worksheets.Item(sheet_name)
117
+ sheet.extend Worksheet
118
+ sheet
119
+ end
120
+
121
+ #=== ���|�[�g�p��Excel�V�[�g�̃I�[�v��
122
+ # book : open���ꂽexcel�I�u�W�F�N�g
123
+ # sheet_name : �V�[�g�ԍ��܂��̓V�[�g��
124
+ #
125
+ # @report_sheet��ݒ肷��
126
+ # Excel�ɏ������ޏꍇ�A��������w�肷��Ə������݊֐��Ăяo�����Ƀp�����[�^�����点��B
127
+ #
128
+ def open_report_sheet( book, sheet_name )
129
+ @report_sheet = open_sheet( book, sheet_name )
130
+ @report_sheet
131
+ end
132
+
133
+
134
+ #-------------------------------------------------------------------
135
+
136
+ #=== �R���\�[���ւ̕\����Report�V�[�g�ւ̋L�^
137
+ # offset: �̓R���\�[���o�͎��̍��}�[�W���Ƃ��Ďg�p�����B
138
+ # : �܂�Excel�V�[�g�̏ꍇ�A���J�����ڂ���f�[�^���Z�b�g���邩�̎w��ƂȂ�B
139
+ # t : �o�͂��镶����̔z����w�肷��B�R���\�[����Excel�V�[�g�ɏo�͂����B
140
+ # sheet : �f�t�H���g��@report_sheet�ȊO�̃V�[�g�ɏo�͂���Ƃ��n�b�V���Ŏw�肷��B:sheet => other_sheet
141
+ # line_no : �o�͂̍s�ԍ����f�t�H���g��@report_line_no�ȊO�̂Ƃ��n�b�V���Ŏw�肷��B :line_no => 2
142
+ #
143
+ # �o�͂���Excel�V�[�g�Əo�͍s�̓n�b�V���Ŏw�肷��B�w�肳��Ȃ��ꍇ�A�Ō��open_report_sheet�ŊJ�����V�[�g���g����B
144
+ # �o�͂���s�͎w�肳��Ȃ��ꍇ @report_line_no���g�p�����B
145
+ #
146
+ # �o�͌��sheet���w�肳��Ă��Ȃ��ꍇ @report_line_no�� + 1 �����B
147
+ # �o�͕�����ɃJ���}�����܂܂Ȃ��Ƃ������������͂��邪offset=0�̃R���\�[���o�͂��t�@�C���Ƀ��_�C���N�g�����CSV�t�@�C���ƂȂ�B
148
+ #
149
+ # ���� : Excel�֏o�͂���ꍇopen_excel�̃u���b�N���ŗ��p����Ȃ���΂Ȃ�Ȃ��B
150
+ #
151
+ def disp_msg_array(offset,t=[''],sheet: nil,line_no: nil )
152
+ print ' '*offset + t.map{|x| x.to_s}.join(', ') + "\n"
153
+
154
+ sheet = @report_sheet if !sheet
155
+ line = @report_line_no if !line_no
156
+
157
+ if sheet
158
+ t.each_with_index do |tt,i|
159
+ sheet[line, offset+i+1] = tt
160
+ end
161
+ @report_line_no += 1 if !line_no
162
+ end
163
+ end
164
+
165
+ #-------------------------------------------------------------------
166
+
167
+ #=== xpath�Ŏw�肳�ꂽ�摜�G�������g����摜���R�s�[�@�\���g�p���A�N���b�v�{�[�h�o�R�Ńt�@�C���ɗ��Ƃ��B
168
+ # ���I�ɐ��������摜��ۑ�����Ƃ��Ɏg�p����B
169
+ # �E�N���b�N�ʼn摜���R�s�[���j���[���o�Ȃ����̂ɂ͎g�p�ł��Ȃ��B
170
+ #
171
+ # node : xpath�̊J�n�m�[�h
172
+ # xp : �摜���w�肷��xpath
173
+ # filename : �������މ摜�t�@�C����
174
+ # wait_mode: �G�������g�̏o����҂‚Ƃ� true ���w�� :wait_mode=>true
175
+ #
176
+ def get_picture_via_clipboard(filename,xp,node: nil,wait_mode:nil)
177
+ if wait_mode
178
+ img = find_element_until(xp,:node => node)
179
+ else
180
+ img = find_element(xp,:node => node)
181
+ end
182
+
183
+ if img
184
+ @driver.action.context_click(img).send_keys('Y').perform
185
+ if Win32::Clipboard.format_available?(Win32::Clipboard::DIB)
186
+ File.open(filename,'wb') do |f|
187
+ f.write Win32::Clipboard.data(Win32::Clipboard::DIB)
188
+ end
189
+ end
190
+ end
191
+ img
192
+ end
193
+
194
+ #-------------------------------------------------------------------
195
+
196
+ #=== xpath�Ŏw�肳�ꂽ�摜�G�������g(img�^�O)��URL����摜���t�@�C���ɗ��Ƃ��B
197
+ # node : xpath�̊J�n�m�[�h
198
+ # xp : �摜���w�肷��xpath
199
+ # pathname : �摜�t�@�C�����������ރt�H���_�p�X
200
+ # wait_mode: �G�������g�̏o����҂‚Ƃ� true ���w�� :wait_mode=>true
201
+ # rename : �t�@�C���������̖��O���珑��������Ƃ��w�� :rename => 'newname.jpg'
202
+ # : �w�肳��Ȃ����src�����Ɏw�肳�ꂽ�t�@�C�������g�p�����B
203
+ #
204
+ # <return> : �摜�t�@�C���p�X or nil
205
+ #
206
+ def get_picture(pathname,xp,node: nil,wait_mode:nil,rename:nil)
207
+ if wait_mode
208
+ img = find_element_until(xp,:node => node)
209
+ else
210
+ img = find_element(xp,:node => node)
211
+ end
212
+
213
+ savefile = nil
214
+
215
+ if img
216
+ pathname += '/' if (pathname != '') and (pathname[-1] != '/')
217
+ url = img[:src]
218
+ if rename
219
+ savefile = pathname + rename
220
+ else
221
+ filename = File.basename(url)
222
+ savefile = pathname + filename
223
+ end
224
+
225
+ open(savefile,'wb') do |wf|
226
+ open(url) do |rf|
227
+ wf.write( rf.read )
228
+ end
229
+ end
230
+ end
231
+ savefile
232
+ end
233
+
234
+ #-------------------------------------------------------------------
235
+
236
+ #=== Excel�ɉ摜�\��t��
237
+ # filename : �\��t����摜�t�@�C��(Excel���Ɏ�荞�܂��)
238
+ # cx,cy : �\��t���ʒu�̃J����(cx)�ƍs(cy) 1�n�܂�̒l
239
+ # sh,sw : �摜�̓\��t���h�b�g�T�C�Y ����(sh) ��(sw)
240
+ # sheet : �\��t����V�[�g�I�u�W�F�N�g�A�w�薳���̏ꍇ@report_sheet
241
+ # fit_x : �J��������sw�ɍ��킹��B
242
+ # fit_y : �s�̍�����sh�ɍ��킹��B
243
+ #
244
+ def add_picture_to_excel(filename,cy,cx,sw,sh,sheet: nil,fit_x: nil,fit_y: nil)
245
+ sheet = @report_sheet if ! sheet
246
+ if sheet
247
+ r = sheet.Range(sheet.r_str(cy,cx))
248
+ sheet.Shapes.AddPicture(filename.gsub("\/","\\"),false,true, r.Left.to_i, r.Top.to_i, 0.75*sw, 0.75*sh)
249
+ sheet.set_width(cy,cx,0.118*sw) if fit_x
250
+ sheet.set_height(cy,cx,0.75*sh) if fit_y
251
+ end
252
+ end
253
+
254
+
255
+ #=== �Z���N�gBOX�I��
256
+ # xp : �Z���N�g�G�������g���w�肷��xpath
257
+ # tx : �I�����镶����̓��e
258
+ #
259
+ def select_by_text(xp,tx)
260
+ select = Selenium::WebDriver::Support::Select.new( @wait.until{@driver.find_element(:xpath,xp)} )
261
+ select.select_by(:text,tx.encode('UTF-8'))
262
+ end
263
+
264
+
265
+ #=== �G�������g�T��
266
+ # xp : �Z���N�g�G�������g���w�肷��xpath
267
+ # node : �r���̗v�f����̏ꍇ�A���̗v�f�I�u�W�F�N�g���w�肷�� :node => element
268
+ #
269
+ # ���‚���Ȃ��Ƃ��ɂ�nil��Ԃ��B
270
+ #
271
+ def find_element(xp,node: nil)
272
+ begin
273
+ if node
274
+ link = node.find_element(:xpath,xp)
275
+ else
276
+ link = @driver.find_element(:xpath,xp)
277
+ end
278
+ rescue
279
+ link = nil
280
+ end
281
+ link
282
+ end
283
+
284
+ #=== �G�������g�T��(���‚���܂ő҂�)
285
+ # xp : �Z���N�g�G�������g���w�肷��xpath
286
+ # node : �r���̗v�f����̏ꍇ�A���̗v�f�I�u�W�F�N�g���w�肷�� :node => element
287
+ #
288
+ # ���‚���Ȃ��Ƃ��ɂ�nil��Ԃ��B
289
+ #
290
+ def find_element_until(xp,node: nil)
291
+ begin
292
+ if node
293
+ link = @wait.until{node.find_element(:xpath,xp)}
294
+ else
295
+ link = @wait.until{@driver.find_element(:xpath,xp)}
296
+ end
297
+ rescue
298
+ link = nil
299
+ end
300
+ link
301
+ end
302
+
303
+ #=== Selenium �I��
304
+ #
305
+ def close
306
+ @driver.quit()
307
+ end
308
+
309
+ end ## --- end of Trail_Selenium class ---
310
+
311
+
312
+ if $0 == __FILE__
313
+
314
+ require 'date'
315
+
316
+ #
317
+ # Twitter�̃��b�Z�[�W�Ɖ摜������ł��B
318
+ #
319
+ ts = Trail_Selenium.new # �N���X�̏�����
320
+ driver = ts.driver
321
+ driver.navigate.to( 'https://twitter.com/3190') # �䍂�R������̃y�[�W
322
+
323
+ # ���O�C���̃_�C�A���O���o�Ă��������
324
+ if ts.find_element('//input[@name="session[username_or_email]"]').displayed?
325
+ ts.find_element('//small[text() = "�A�J�E���g���������̏ꍇ"]').click
326
+ end
327
+
328
+ # �ŏ��̉摜�� pic1.jpg �Ƃ������O�ŕۑ����Ă݂�B
329
+ ts.get_picture('','//div[@class="AdaptiveMedia-photoContainer js-adaptive-photo "]/img',:rename=>'Hotaka.jpg')
330
+
331
+ # ���ݓǂݍ��܂�Ă���post�����o��
332
+ posts = driver.find_elements(:xpath,'//div[@class="stream"]/ol/li')
333
+ print "Post�� = #{posts.size}\n"
334
+
335
+ # �ۑ��p��Excel�t�@�C�����e���v���[�g����R�s�[���ĊJ��
336
+ ts.open_excel("Hotakasansou_#{DateTime.now.strftime("%Y%m%d%H%M%S")}.xls",'Report_tenplate.xls') do |book|
337
+
338
+ # �������ݗp�̃V�[�g���J��
339
+ sheet = ts.open_report_sheet(book,'Report')
340
+
341
+ ts.report_line_no = 2 # �����݊J�n��2�s�ڂ���
342
+ sheet.set_width(1,1,11.8) # �Z��(1,1)��100pixcel�̃T�C�Y�ɂ���B
343
+ sheet.set_height(1,1,75) # Y: 100pixcel = 75 point
344
+ sheet.set_width(1,3,11.8) # X: 100pixcel = 11.8 ���� �摜�p�̃Z��������ݒ�
345
+
346
+ # �ǂݍ���post�����ɏ���
347
+ posts.each do |post|
348
+
349
+ # �c�C�[�g�����l�̖��O
350
+ name = post.find_element(:xpath,'.//div[@class="stream-item-header"]/a/strong').text()
351
+
352
+ # ���b�Z�[�W���e
353
+ msg = post.find_element(:xpath,'.//p').text()
354
+
355
+ # �R���\�[����Excel�֏o��
356
+ ts.disp_msg_array(0,[name,msg])
357
+
358
+ # ��΃p�X�ł̃t�@�C�������쐬
359
+ temp_file = File.expand_path('../temp.jpg',__FILE__)
360
+
361
+ # �摜������Ȃ���o��
362
+ if ts.get_picture_via_clipboard(temp_file, './/div[@class="content"]/div[3]//img',:node=>post)
363
+ # �s�N�Z���T�C�Y�𒲂ׂ�
364
+ sz = FastImage.size(temp_file)
365
+
366
+ # Excel�ɓ\��t��report_line_no�͊��Ɏ��̍s�ɍs���Ă���̂ŕ␳����
367
+ # �摜�T�C�Y�͕���100pixcel�ɂȂ�悤�ɕ␳
368
+ # fit_y��true�ɂ��ăZ���̍������摜�̍����ɍ��킹��B
369
+ ts.add_picture_to_excel(temp_file,ts.report_line_no - 1,3,100,(100*sz[1]/sz[0]), :fit_y=>true)
370
+ end
371
+ end
372
+
373
+ sheet.select(1,1) # �擪�Z�����Z���N�g
374
+
375
+ # Excel��ۑ�
376
+ book.save
377
+ end
378
+
379
+ # ���O�C���̗�
380
+ #
381
+ # # ���O�C���p�̃_�C�A���O���\������Ă��Ȃ���΃N���b�N���ĕ\������B
382
+ # if ! ts.find_element('//input[@name="session[username_or_email]"]').displayed?
383
+ # ts.find_element('//small[text() = "�A�J�E���g���������̏ꍇ"]').click
384
+ # end
385
+ #
386
+ # # ���O�C���@�z��̍Ō�̃f�[�^�̓T�u�~�b�g�{�^���̎w��
387
+ # # ID�ƃp�X���[�h�͏��������Ă��������B
388
+ # #
389
+ # ts.login([[:name,'session[username_or_email]','your_facebook_ID'],
390
+ # [:name,'session[password]','password'],
391
+ # [:xpath,'//input[@type="submit"]']])
392
+
393
+ # �u���E�U�̏I��
394
+ ts.close
395
+
396
+ end
@@ -0,0 +1,3 @@
1
+ module TrailSelenium
2
+ VERSION = "0.1.1"
3
+ end
@@ -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 'trail_selenium/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "trail_selenium"
8
+ spec.version = TrailSelenium::VERSION
9
+ spec.authors = ["Mt.Trail"]
10
+ spec.email = ["trail@trail4you.com"]
11
+
12
+ spec.summary = %q{Handling selenium from ruby script}
13
+ spec.description = %q{Handling selenium from ruby script}
14
+ spec.homepage = "http://www.trail4you.com/TechNote/Ruby/selenium.html"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.12"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "selenium-webdriver", "~> 0"
24
+ spec.add_development_dependency "trail_excel", "~> 0"
25
+ spec.add_development_dependency "fastimage", "~> 0"
26
+ spec.add_development_dependency "win32-clipboard", "~> 0"
27
+
28
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trail_selenium
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Mt.Trail
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-07-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: selenium-webdriver
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: trail_excel
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fastimage
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'
83
+ - !ruby/object:Gem::Dependency
84
+ name: win32-clipboard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Handling selenium from ruby script
98
+ email:
99
+ - trail@trail4you.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - Gemfile
106
+ - README.md
107
+ - Rakefile
108
+ - bin/console
109
+ - bin/setup
110
+ - lib/trail_selenium.rb
111
+ - lib/trail_selenium/version.rb
112
+ - trail_selenium.gemspec
113
+ homepage: http://www.trail4you.com/TechNote/Ruby/selenium.html
114
+ licenses: []
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 2.4.5.1
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: Handling selenium from ruby script
136
+ test_files: []
137
+ has_rdoc: