safariwatir 0.3.7 → 0.3.8
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.
- data/README.rdoc +15 -10
- data/Rakefile +2 -2
- data/lib/safariwatir.rb +58 -5
- data/lib/safariwatir/scripter.rb +17 -12
- data/safariwatir.gemspec +7 -3
- metadata +19 -9
data/README.rdoc
CHANGED
@@ -4,8 +4,8 @@ http://twitter.com/swombat/status/1280692921
|
|
4
4
|
= SafariWatir
|
5
5
|
|
6
6
|
* http://github.com/redsquirrel/safariwatir
|
7
|
-
* http://
|
8
|
-
* http://
|
7
|
+
* http://groups.google.com/group/watir-general
|
8
|
+
* http://wiki.openqa.org/display/WTR/SafariWatir
|
9
9
|
* http://twitter.com/SafariWatir
|
10
10
|
|
11
11
|
== DESCRIPTION:
|
@@ -18,7 +18,6 @@ This project aims at adding Watir support for Safari on the Mac.
|
|
18
18
|
|
19
19
|
Mac OS X running Safari. Some features require you to turn on "Enable access for assistive devices" in System Preferences > Universal Access.
|
20
20
|
|
21
|
-
|
22
21
|
== SYNOPSIS:
|
23
22
|
|
24
23
|
require 'rubygems'
|
@@ -38,13 +37,19 @@ Mac OS X running Safari. Some features require you to turn on "Enable access for
|
|
38
37
|
|
39
38
|
git clone git://github.com/redsquirrel/safariwatir.git
|
40
39
|
cd safariwatir
|
40
|
+
git submodule update --init
|
41
41
|
rake install
|
42
42
|
|
43
|
-
== RUNNING SAFARIWATIR AGAINST
|
43
|
+
== RUNNING SAFARIWATIR AGAINST WATIRSPEC
|
44
|
+
|
45
|
+
git clone git://github.com/redsquirrel/safariwatir.git
|
46
|
+
cd safariwatir
|
47
|
+
git submodule update --init
|
48
|
+
spec spec
|
49
|
+
|
50
|
+
== CONTRIBUTING:
|
44
51
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
# Edit unittests/options.yml and set browser: safari
|
50
|
-
ruby unittests/core_tests.rb
|
52
|
+
WatirSpec is the emergent standard for the Watir API.
|
53
|
+
We do not currently support all of the functionality described by WatirSpec.
|
54
|
+
A good way to contribute would be to fix a few failing specs as defined by WatirSpec.
|
55
|
+
See "Running SafairWatir Against WatirSpec" to get started.
|
data/Rakefile
CHANGED
@@ -2,10 +2,10 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('safariwatir', '0.3.
|
5
|
+
Echoe.new('safariwatir', '0.3.7') do | config |
|
6
6
|
config.summary = %q{Automated testing tool for web applications.}
|
7
7
|
config.description = %q{WATIR stands for "Web Application Testing in Ruby". See WATIR project for more information. This is a Safari-version of the original IE-only WATIR.}
|
8
|
-
config.url = 'http://
|
8
|
+
config.url = 'http://wiki.openqa.org/display/WTR/SafariWatir'
|
9
9
|
config.author = 'Dave Hoover'
|
10
10
|
config.email = 'dave@obtiva.com'
|
11
11
|
config.ignore_pattern = ['tmp/*', 'script/*']
|
data/lib/safariwatir.rb
CHANGED
@@ -102,12 +102,12 @@ module Watir
|
|
102
102
|
|
103
103
|
# overridden in derivitives
|
104
104
|
def tag
|
105
|
-
raise RuntimeError, "tag not provided for #{
|
105
|
+
raise RuntimeError, "tag not provided for #{element_name}"
|
106
106
|
end
|
107
107
|
|
108
108
|
# overridden in derivitives
|
109
109
|
def speak
|
110
|
-
@scripter.speak("#{
|
110
|
+
@scripter.speak("#{element_name}'s don't know how to speak.")
|
111
111
|
end
|
112
112
|
|
113
113
|
def exists?
|
@@ -115,7 +115,7 @@ module Watir
|
|
115
115
|
end
|
116
116
|
alias :exist? :exists?
|
117
117
|
|
118
|
-
def
|
118
|
+
def element_name
|
119
119
|
self.class.name.split("::").last
|
120
120
|
end
|
121
121
|
|
@@ -126,10 +126,10 @@ module Watir
|
|
126
126
|
def operate(&block)
|
127
127
|
scripter_suffix = OPERATIONS[how]
|
128
128
|
if scripter_suffix.kind_of? Hash
|
129
|
-
scripter_suffix = scripter_suffix[
|
129
|
+
scripter_suffix = scripter_suffix[element_name]
|
130
130
|
end
|
131
131
|
if scripter_suffix.nil?
|
132
|
-
raise "SafariWatir does not currently support finding by #{how}"
|
132
|
+
raise Watir::Exception::MissingWayOfFindingObjectException, "SafariWatir does not currently support finding by #{how}"
|
133
133
|
end
|
134
134
|
@scripter.send("operate_#{scripter_suffix}", self, &block)
|
135
135
|
end
|
@@ -148,6 +148,7 @@ module Watir
|
|
148
148
|
:value => "by_input_value",
|
149
149
|
:caption => "by_input_value",
|
150
150
|
:src => "by_src",
|
151
|
+
:title => "by_title",
|
151
152
|
:xpath => "by_xpath",
|
152
153
|
}
|
153
154
|
end
|
@@ -172,6 +173,10 @@ module Watir
|
|
172
173
|
def enabled?
|
173
174
|
!@scripter.element_disabled?(self)
|
174
175
|
end
|
176
|
+
|
177
|
+
def disabled?
|
178
|
+
@scripter.element_disabled?(self)
|
179
|
+
end
|
175
180
|
|
176
181
|
def tag; "INPUT"; end
|
177
182
|
|
@@ -249,6 +254,31 @@ module Watir
|
|
249
254
|
end
|
250
255
|
end
|
251
256
|
|
257
|
+
def href
|
258
|
+
attr('href') || ''
|
259
|
+
end
|
260
|
+
alias :url :href
|
261
|
+
|
262
|
+
def id
|
263
|
+
attr('id') || ''
|
264
|
+
end
|
265
|
+
|
266
|
+
def title
|
267
|
+
attr('title') || ''
|
268
|
+
end
|
269
|
+
|
270
|
+
def class_name
|
271
|
+
attr('class') || ''
|
272
|
+
end
|
273
|
+
|
274
|
+
def style
|
275
|
+
attr('style') || ''
|
276
|
+
end
|
277
|
+
|
278
|
+
def name
|
279
|
+
attr('name') || ''
|
280
|
+
end
|
281
|
+
|
252
282
|
def tag; "A"; end
|
253
283
|
end
|
254
284
|
|
@@ -324,6 +354,10 @@ module Watir
|
|
324
354
|
def tag; "SPAN"; end
|
325
355
|
end
|
326
356
|
|
357
|
+
class Map < InputElement
|
358
|
+
def tag; "MAP"; end
|
359
|
+
end
|
360
|
+
|
327
361
|
class Table
|
328
362
|
def_init :scripter, :how, :what
|
329
363
|
attr_reader :how, :what
|
@@ -418,6 +452,9 @@ module Watir
|
|
418
452
|
end
|
419
453
|
end
|
420
454
|
end
|
455
|
+
|
456
|
+
class TextArea < TextField
|
457
|
+
end
|
421
458
|
|
422
459
|
class Password < TextField
|
423
460
|
end
|
@@ -430,7 +467,15 @@ module Watir
|
|
430
467
|
def tag; "LI"; end
|
431
468
|
end
|
432
469
|
|
470
|
+
class Area < InputElement
|
471
|
+
def tag; "AREA"; end
|
472
|
+
end
|
473
|
+
|
433
474
|
# Elements
|
475
|
+
|
476
|
+
def area(how, what)
|
477
|
+
Area.new(scripter, how, what)
|
478
|
+
end
|
434
479
|
|
435
480
|
def button(how, what)
|
436
481
|
Button.new(scripter, how, what)
|
@@ -476,6 +521,10 @@ module Watir
|
|
476
521
|
Link.new(scripter, how, what)
|
477
522
|
end
|
478
523
|
|
524
|
+
def map(how, what)
|
525
|
+
Map.new(scripter, how, what)
|
526
|
+
end
|
527
|
+
|
479
528
|
def password(how, what)
|
480
529
|
Password.new(scripter, how, what)
|
481
530
|
end
|
@@ -503,6 +552,10 @@ module Watir
|
|
503
552
|
def text_field(how, what)
|
504
553
|
TextField.new(scripter, how, what)
|
505
554
|
end
|
555
|
+
|
556
|
+
def text_area(how, what)
|
557
|
+
TextArea.new(scripter, how, what)
|
558
|
+
end
|
506
559
|
|
507
560
|
def ul(how, what)
|
508
561
|
Ul.new(scripter, how, what)
|
data/lib/safariwatir/scripter.rb
CHANGED
@@ -71,8 +71,8 @@ if (element) {
|
|
71
71
|
|
72
72
|
def wrap(script)
|
73
73
|
# add in frame name when referencing parent or document
|
74
|
-
script.gsub!
|
75
|
-
script.gsub!
|
74
|
+
script.gsub! /\bparent\b/, "parent.#{@page_container}"
|
75
|
+
script.gsub! /\bdocument\b/, "#{@page_container}.document"
|
76
76
|
super(script)
|
77
77
|
end
|
78
78
|
end
|
@@ -364,14 +364,14 @@ for (var i = 0; i < document.links.length; i++) {
|
|
364
364
|
private :find_link
|
365
365
|
|
366
366
|
def handle_match(element, how = nil)
|
367
|
-
how = {:text => "text", :url => "href"}[element.how] unless how
|
367
|
+
how = {:text => "text", :url => "href", :id => "id"}[element.how] unless how
|
368
368
|
case element.what
|
369
369
|
when Regexp
|
370
370
|
%|#{how}.match(/#{element.what.source}/#{element.what.casefold? ? "i":nil})|
|
371
371
|
when String
|
372
372
|
%|#{how} == '#{element.what}'|
|
373
373
|
else
|
374
|
-
raise RuntimeError, "Unable to locate #{element.
|
374
|
+
raise RuntimeError, "Unable to locate #{element.element_name} with #{element.how}"
|
375
375
|
end
|
376
376
|
end
|
377
377
|
private :handle_match
|
@@ -417,7 +417,7 @@ var element = elements[0];|, yield)
|
|
417
417
|
# Checkboxes/Radios have the same name, different values
|
418
418
|
def handle_form_element_name_match(element)
|
419
419
|
element_capture = %|element = elements[i];break;|
|
420
|
-
if element.by_value
|
420
|
+
if element.respond_to?(:by_value) and element.by_value
|
421
421
|
%|if (elements[i].value == '#{element.by_value}') {
|
422
422
|
#{element_capture}
|
423
423
|
}|
|
@@ -443,6 +443,10 @@ var element = elements[0];|, yield)
|
|
443
443
|
operate_by(element, 'alt', &block)
|
444
444
|
end
|
445
445
|
|
446
|
+
def operate_by_title(element, &block)
|
447
|
+
operate_by(element, 'title', &block)
|
448
|
+
end
|
449
|
+
|
446
450
|
def operate_by_action(element, &block)
|
447
451
|
operate_by(element, 'action', &block)
|
448
452
|
end
|
@@ -452,8 +456,9 @@ var element = elements[0];|, yield)
|
|
452
456
|
end
|
453
457
|
|
454
458
|
def operate_by_xpath(element)
|
459
|
+
xpath = element.what.gsub(/"/, "\'")
|
455
460
|
js.operate(%|
|
456
|
-
var result = document.evaluate(
|
461
|
+
var result = document.evaluate("#{xpath}", document.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
|
457
462
|
var element = result ? result.singleNodeValue : null;
|
458
463
|
|, yield)
|
459
464
|
end
|
@@ -502,13 +507,13 @@ end tell|, true)
|
|
502
507
|
AppleScripter.new(TableJavaScripter.new(element))
|
503
508
|
end
|
504
509
|
|
505
|
-
def for_frame(
|
510
|
+
def for_frame(frame)
|
506
511
|
# verify the frame exists
|
507
512
|
execute(
|
508
|
-
%|if (parent.#{
|
513
|
+
%|if (parent.#{frame.name} == undefined) {
|
509
514
|
return '#{FRAME_NOT_FOUND}';
|
510
|
-
}|,
|
511
|
-
AppleScripter.new(FrameJavaScripter.new(
|
515
|
+
}|, frame)
|
516
|
+
AppleScripter.new(FrameJavaScripter.new(frame))
|
512
517
|
end
|
513
518
|
|
514
519
|
def speak_value_of(element = @element)
|
@@ -548,11 +553,11 @@ SCRIPT`
|
|
548
553
|
when NO_RESPONSE
|
549
554
|
nil
|
550
555
|
when ELEMENT_NOT_FOUND
|
551
|
-
raise UnknownObjectException, "Unable to locate #{element.
|
556
|
+
raise UnknownObjectException, "Unable to locate #{element.element_name} element with #{element.how} of #{element.what}"
|
552
557
|
when TABLE_CELL_NOT_FOUND
|
553
558
|
raise UnknownCellException, "Unable to locate a table cell with #{element.how} of #{element.what}"
|
554
559
|
when FRAME_NOT_FOUND
|
555
|
-
raise UnknownFrameException, "Unable to locate a frame with name #{element.
|
560
|
+
raise UnknownFrameException, "Unable to locate a frame with name #{element.element_name}"
|
556
561
|
else
|
557
562
|
response
|
558
563
|
end
|
data/safariwatir.gemspec
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
-
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
spec = Gem::Specification.new do |s|
|
4
6
|
s.name = %q{safariwatir}
|
5
|
-
s.version = "0.3.
|
7
|
+
s.version = "0.3.8"
|
6
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
7
9
|
s.authors = ["Dave Hoover", "Tom Copeland"]
|
8
|
-
s.date = %
|
10
|
+
s.date = Time.now.strftime("%Y-%m-%d")
|
9
11
|
s.description = %q{WATIR stands for "Web Application Testing in Ruby". See WATIR project for more information. This is a Safari-version of the original IE-only WATIR.}
|
10
12
|
s.email = %q{dave@obtiva.com}
|
11
13
|
s.extra_rdoc_files = ["lib/safariwatir/core_ext.rb", "lib/safariwatir/scripter.rb", "lib/safariwatir.rb", "lib/watir/exceptions.rb", "README.rdoc"]
|
@@ -29,3 +31,5 @@ Gem::Specification.new do |s|
|
|
29
31
|
s.add_dependency(%q<rb-appscript>, [">= 0"])
|
30
32
|
end
|
31
33
|
end
|
34
|
+
|
35
|
+
Gem::Builder.new(spec).build if $0 == __FILE__
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: safariwatir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 8
|
9
|
+
version: 0.3.8
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Dave Hoover
|
@@ -10,19 +15,21 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date:
|
18
|
+
date: 2010-08-02 00:00:00 -04:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
17
22
|
name: rb-appscript
|
18
|
-
|
19
|
-
|
20
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
25
|
requirements:
|
22
26
|
- - ">="
|
23
27
|
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
24
30
|
version: "0"
|
25
|
-
|
31
|
+
type: :development
|
32
|
+
version_requirements: *id001
|
26
33
|
description: WATIR stands for "Web Application Testing in Ruby". See WATIR project for more information. This is a Safari-version of the original IE-only WATIR.
|
27
34
|
email: dave@obtiva.com
|
28
35
|
executables: []
|
@@ -62,18 +69,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
62
69
|
requirements:
|
63
70
|
- - ">="
|
64
71
|
- !ruby/object:Gem::Version
|
72
|
+
segments:
|
73
|
+
- 0
|
65
74
|
version: "0"
|
66
|
-
version:
|
67
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
76
|
requirements:
|
69
77
|
- - ">="
|
70
78
|
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 1
|
81
|
+
- 2
|
71
82
|
version: "1.2"
|
72
|
-
version:
|
73
83
|
requirements: []
|
74
84
|
|
75
85
|
rubyforge_project: safariwatir
|
76
|
-
rubygems_version: 1.3.
|
86
|
+
rubygems_version: 1.3.6
|
77
87
|
signing_key:
|
78
88
|
specification_version: 2
|
79
89
|
summary: Automated testing tool for web applications.
|