capybara-webkit 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTING.md +9 -0
- data/ChangeLog +18 -0
- data/NEWS.md +7 -0
- data/lib/capybara/driver/webkit/node.rb +12 -0
- data/lib/capybara/driver/webkit/version.rb +1 -1
- data/spec/driver_spec.rb +88 -12
- data/src/Connection.cpp +19 -1
- data/src/Connection.h +3 -0
- data/src/capybara.js +18 -4
- metadata +75 -121
data/CONTRIBUTING.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
We love pull requests. Here's a quick guide:
|
2
2
|
|
3
|
+
Dependencies
|
4
|
+
|
5
|
+
Some of the tests depend on the `identify` command that comes with Imagemagick.
|
6
|
+
Imagemagick can be installed via [homebrew](http://mxcl.github.com/homebrew/).
|
7
|
+
|
8
|
+
brew install imagemagick
|
9
|
+
|
10
|
+
Contributing
|
11
|
+
|
3
12
|
1. Fork the repo.
|
4
13
|
|
5
14
|
2. Run the tests. We only take pull requests with passing tests, and it's great
|
data/ChangeLog
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
2012-02-01 Joe Ferris <jferris@thoughtbot.com>
|
2
|
+
* driver_spec.rb, Connection.cpp, Connection.h:
|
3
|
+
Try to detect when a command starts a page load and wait for it to finish
|
4
|
+
|
5
|
+
2012-01-27 Matthew Mongeau <halogenandtoast@gmail.com>
|
6
|
+
* driver_spec.rb, capybara.js: Trigger mousedown and mouseup events
|
7
|
+
* driver_spec.rb, capybara.js: Simulate browser events more closely
|
8
|
+
|
9
|
+
2012-01-19 Marco Antonio <marcofognog@gmail.com>
|
10
|
+
* node.rb, driver_spec.rb:
|
11
|
+
Raise ElementNotDisplayedError also for #drag_to and #select_option when they are invisible.
|
12
|
+
|
13
|
+
2012-01-18 Marco Antonio <marcofognog@gmail.com>
|
14
|
+
* node.rb, driver_spec.rb:
|
15
|
+
Raise error when an invisible element receives #click so it resembles a browser more closely.
|
16
|
+
|
17
|
+
2012-01-15 Marc Schwieterman
|
18
|
+
* CONTRIBUTING.md: add imagemagick dependency to contributing guide
|
data/NEWS.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
New for 0.9.0:
|
2
|
+
|
3
|
+
* Raise an error when an invisible element receives #click.
|
4
|
+
* Raise ElementNotDisplayedError for #drag_to and #select_option when element is invisible.
|
5
|
+
* Trigger mousedown and mouseup events.
|
6
|
+
* Model mouse events more closely to the browser.
|
7
|
+
* Try to detech when a command starts a page load and wait for it to finish
|
@@ -1,5 +1,9 @@
|
|
1
1
|
class Capybara::Driver::Webkit
|
2
2
|
class Node < Capybara::Driver::Node
|
3
|
+
|
4
|
+
class ElementNotDisplayedError < StandardError
|
5
|
+
end
|
6
|
+
|
3
7
|
NBSP = "\xC2\xA0"
|
4
8
|
NBSP.force_encoding("UTF-8") if NBSP.respond_to?(:force_encoding)
|
5
9
|
|
@@ -33,6 +37,7 @@ class Capybara::Driver::Webkit
|
|
33
37
|
end
|
34
38
|
|
35
39
|
def select_option
|
40
|
+
check_visibility(self)
|
36
41
|
invoke "selectOption"
|
37
42
|
end
|
38
43
|
|
@@ -46,10 +51,13 @@ class Capybara::Driver::Webkit
|
|
46
51
|
end
|
47
52
|
|
48
53
|
def click
|
54
|
+
check_visibility(self)
|
49
55
|
invoke "click"
|
50
56
|
end
|
51
57
|
|
52
58
|
def drag_to(element)
|
59
|
+
check_visibility(self)
|
60
|
+
check_visibility(element)
|
53
61
|
invoke 'dragTo', element.native
|
54
62
|
end
|
55
63
|
|
@@ -118,5 +126,9 @@ class Capybara::Driver::Webkit
|
|
118
126
|
def multiple_select?
|
119
127
|
self.tag_name == "select" && self["multiple"] == "multiple"
|
120
128
|
end
|
129
|
+
|
130
|
+
def check_visibility(element)
|
131
|
+
raise(ElementNotDisplayedError, "This element is not visible so it may not be interacted with") unless element.visible?
|
132
|
+
end
|
121
133
|
end
|
122
134
|
end
|
data/spec/driver_spec.rb
CHANGED
@@ -529,6 +529,44 @@ describe Capybara::Driver::Webkit do
|
|
529
529
|
end
|
530
530
|
end
|
531
531
|
|
532
|
+
context "dom events" do
|
533
|
+
before(:all) do
|
534
|
+
@app = lambda do |env|
|
535
|
+
body = <<-HTML
|
536
|
+
|
537
|
+
<html><body>
|
538
|
+
<a href='#' class='watch'>Link</a>
|
539
|
+
<ul id="events"></ul>
|
540
|
+
<script type="text/javascript">
|
541
|
+
var events = document.getElementById("events");
|
542
|
+
var recordEvent = function (event) {
|
543
|
+
var element = document.createElement("li");
|
544
|
+
element.innerHTML = event.type;
|
545
|
+
events.appendChild(element);
|
546
|
+
};
|
547
|
+
|
548
|
+
var elements = document.getElementsByClassName("watch");
|
549
|
+
for (var i = 0; i < elements.length; i++) {
|
550
|
+
var element = elements[i];
|
551
|
+
element.addEventListener("mousedown", recordEvent);
|
552
|
+
element.addEventListener("mouseup", recordEvent);
|
553
|
+
element.addEventListener("click", recordEvent);
|
554
|
+
}
|
555
|
+
</script>
|
556
|
+
</body></html>
|
557
|
+
HTML
|
558
|
+
[200,
|
559
|
+
{ 'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s },
|
560
|
+
[body]]
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
564
|
+
it "triggers mouse events" do
|
565
|
+
subject.find("//a").first.click
|
566
|
+
subject.find("//li").map(&:text).should == %w(mousedown mouseup click)
|
567
|
+
end
|
568
|
+
end
|
569
|
+
|
532
570
|
context "form events app" do
|
533
571
|
before(:all) do
|
534
572
|
@app = lambda do |env|
|
@@ -564,6 +602,8 @@ describe Capybara::Driver::Webkit do
|
|
564
602
|
element.addEventListener("keyup", recordEvent);
|
565
603
|
element.addEventListener("change", recordEvent);
|
566
604
|
element.addEventListener("blur", recordEvent);
|
605
|
+
element.addEventListener("mousedown", recordEvent);
|
606
|
+
element.addEventListener("mouseup", recordEvent);
|
567
607
|
element.addEventListener("click", recordEvent);
|
568
608
|
}
|
569
609
|
</script>
|
@@ -597,12 +637,12 @@ describe Capybara::Driver::Webkit do
|
|
597
637
|
|
598
638
|
it "triggers radio input events" do
|
599
639
|
subject.find("//input[@type='radio']").first.set(true)
|
600
|
-
subject.find("//li").map(&:text).should == %w(
|
640
|
+
subject.find("//li").map(&:text).should == %w(mousedown mouseup change click)
|
601
641
|
end
|
602
642
|
|
603
643
|
it "triggers checkbox events" do
|
604
644
|
subject.find("//input[@type='checkbox']").first.set(true)
|
605
|
-
subject.find("//li").map(&:text).should == %w(
|
645
|
+
subject.find("//li").map(&:text).should == %w(mousedown mouseup change click)
|
606
646
|
end
|
607
647
|
end
|
608
648
|
|
@@ -614,10 +654,13 @@ describe Capybara::Driver::Webkit do
|
|
614
654
|
<div id="change">Change me</div>
|
615
655
|
<div id="mouseup">Push me</div>
|
616
656
|
<div id="mousedown">Release me</div>
|
657
|
+
<div id="invisible-mouseup" style="display:none;">You can't push me</div>
|
658
|
+
<div id="invisible-mousedown" style="display:none;">You can't release me</div>
|
617
659
|
<form action="/" method="GET">
|
618
660
|
<select id="change_select" name="change_select">
|
619
661
|
<option value="1" id="option-1" selected="selected">one</option>
|
620
662
|
<option value="2" id="option-2">two</option>
|
663
|
+
<option value="2" id="invisible-option" style="display:none;">three</option>
|
621
664
|
</select>
|
622
665
|
</form>
|
623
666
|
<script type="text/javascript">
|
@@ -639,6 +682,7 @@ describe Capybara::Driver::Webkit do
|
|
639
682
|
});
|
640
683
|
</script>
|
641
684
|
<a href="/next">Next</a>
|
685
|
+
<a href="/next" id="hidden" style="display:none;">Not displayed</a>
|
642
686
|
</body></html>
|
643
687
|
HTML
|
644
688
|
[200,
|
@@ -647,7 +691,7 @@ describe Capybara::Driver::Webkit do
|
|
647
691
|
end
|
648
692
|
end
|
649
693
|
|
650
|
-
it "clicks
|
694
|
+
it "clicks a visible element" do
|
651
695
|
subject.find("//a").first.click
|
652
696
|
subject.current_url =~ %r{/next$}
|
653
697
|
end
|
@@ -679,6 +723,39 @@ describe Capybara::Driver::Webkit do
|
|
679
723
|
|
680
724
|
subject.find("//*[@class='triggered']").size.should == 1
|
681
725
|
end
|
726
|
+
|
727
|
+
context "raises error when" do
|
728
|
+
it "tries to click an invisible element" do
|
729
|
+
expect {
|
730
|
+
subject.find("//*[@id='hidden']").first.click
|
731
|
+
}.to raise_error(Capybara::Driver::Webkit::Node::ElementNotDisplayedError)
|
732
|
+
end
|
733
|
+
|
734
|
+
it "tries to drag an invisible element to a visible one" do
|
735
|
+
draggable = subject.find("//*[@id='invisible-mousedown']").first
|
736
|
+
container = subject.find("//*[@id='mouseup']").first
|
737
|
+
|
738
|
+
expect {
|
739
|
+
draggable.drag_to(container)
|
740
|
+
}.to raise_error(Capybara::Driver::Webkit::Node::ElementNotDisplayedError)
|
741
|
+
end
|
742
|
+
|
743
|
+
it "tries to drag a visible element to an invisible one" do
|
744
|
+
draggable = subject.find("//*[@id='mousedown']").first
|
745
|
+
container = subject.find("//*[@id='invisible-mouseup']").first
|
746
|
+
|
747
|
+
expect {
|
748
|
+
draggable.drag_to(container)
|
749
|
+
}.to raise_error(Capybara::Driver::Webkit::Node::ElementNotDisplayedError)
|
750
|
+
end
|
751
|
+
|
752
|
+
it "tries to select an invisible option" do
|
753
|
+
option = subject.find("//option[@id='invisible-option']").first
|
754
|
+
expect {
|
755
|
+
option.select_option
|
756
|
+
}.to raise_error(Capybara::Driver::Webkit::Node::ElementNotDisplayedError)
|
757
|
+
end
|
758
|
+
end
|
682
759
|
end
|
683
760
|
|
684
761
|
context "nesting app" do
|
@@ -706,14 +783,13 @@ describe Capybara::Driver::Webkit do
|
|
706
783
|
|
707
784
|
context "slow app" do
|
708
785
|
before(:all) do
|
786
|
+
@result = ""
|
709
787
|
@app = lambda do |env|
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
HTML
|
716
|
-
sleep(0.5)
|
788
|
+
if env["PATH_INFO"] == "/result"
|
789
|
+
sleep(0.5)
|
790
|
+
@result << "finished"
|
791
|
+
end
|
792
|
+
body = %{<html><body><a href="/result">Go</a></body></html>}
|
717
793
|
[200,
|
718
794
|
{ 'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s },
|
719
795
|
[body]]
|
@@ -721,8 +797,8 @@ describe Capybara::Driver::Webkit do
|
|
721
797
|
end
|
722
798
|
|
723
799
|
it "waits for a request to load" do
|
724
|
-
subject.find("//
|
725
|
-
|
800
|
+
subject.find("//a").first.click
|
801
|
+
@result.should == "finished"
|
726
802
|
end
|
727
803
|
end
|
728
804
|
|
data/src/Connection.cpp
CHANGED
@@ -17,6 +17,8 @@ Connection::Connection(QTcpSocket *socket, WebPage *page, QObject *parent) :
|
|
17
17
|
m_command = NULL;
|
18
18
|
m_pageSuccess = true;
|
19
19
|
m_commandWaiting = false;
|
20
|
+
m_pageLoadingFromCommand = false;
|
21
|
+
m_pendingResponse = NULL;
|
20
22
|
connect(m_socket, SIGNAL(readyRead()), m_commandParser, SLOT(checkNext()));
|
21
23
|
connect(m_commandParser, SIGNAL(commandReady(QString, QStringList)), this, SLOT(commandReady(QString, QStringList)));
|
22
24
|
connect(m_page, SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
|
@@ -38,6 +40,7 @@ void Connection::startCommand() {
|
|
38
40
|
if (m_pageSuccess) {
|
39
41
|
m_command = m_commandFactory->createCommand(m_commandName.toAscii().constData());
|
40
42
|
if (m_command) {
|
43
|
+
connect(m_page, SIGNAL(loadStarted()), this, SLOT(pageLoadingFromCommand()));
|
41
44
|
connect(m_command,
|
42
45
|
SIGNAL(finished(Response *)),
|
43
46
|
this,
|
@@ -55,16 +58,31 @@ void Connection::startCommand() {
|
|
55
58
|
}
|
56
59
|
}
|
57
60
|
|
61
|
+
void Connection::pageLoadingFromCommand() {
|
62
|
+
m_pageLoadingFromCommand = true;
|
63
|
+
}
|
64
|
+
|
58
65
|
void Connection::pendingLoadFinished(bool success) {
|
59
66
|
m_pageSuccess = success;
|
60
67
|
if (m_commandWaiting)
|
61
68
|
startCommand();
|
69
|
+
if (m_pageLoadingFromCommand) {
|
70
|
+
m_pageLoadingFromCommand = false;
|
71
|
+
if (m_pendingResponse) {
|
72
|
+
writeResponse(m_pendingResponse);
|
73
|
+
m_pendingResponse = NULL;
|
74
|
+
}
|
75
|
+
}
|
62
76
|
}
|
63
77
|
|
64
78
|
void Connection::finishCommand(Response *response) {
|
79
|
+
disconnect(m_page, SIGNAL(loadStarted()), this, SLOT(pageLoadingFromCommand()));
|
65
80
|
m_command->deleteLater();
|
66
81
|
m_command = NULL;
|
67
|
-
|
82
|
+
if (m_pageLoadingFromCommand)
|
83
|
+
m_pendingResponse = response;
|
84
|
+
else
|
85
|
+
writeResponse(response);
|
68
86
|
}
|
69
87
|
|
70
88
|
void Connection::writeResponse(Response *response) {
|
data/src/Connection.h
CHANGED
@@ -18,6 +18,7 @@ class Connection : public QObject {
|
|
18
18
|
void commandReady(QString commandName, QStringList arguments);
|
19
19
|
void finishCommand(Response *response);
|
20
20
|
void pendingLoadFinished(bool success);
|
21
|
+
void pageLoadingFromCommand();
|
21
22
|
|
22
23
|
private:
|
23
24
|
void startCommand();
|
@@ -32,5 +33,7 @@ class Connection : public QObject {
|
|
32
33
|
CommandFactory *m_commandFactory;
|
33
34
|
bool m_pageSuccess;
|
34
35
|
bool m_commandWaiting;
|
36
|
+
bool m_pageLoadingFromCommand;
|
37
|
+
Response *m_pendingResponse;
|
35
38
|
};
|
36
39
|
|
data/src/capybara.js
CHANGED
@@ -96,7 +96,21 @@ Capybara = {
|
|
96
96
|
return this.nodes[index].submit();
|
97
97
|
},
|
98
98
|
|
99
|
+
mousedown: function(index) {
|
100
|
+
var mousedownEvent = document.createEvent('MouseEvents');
|
101
|
+
mousedownEvent.initMouseEvent('mousedown', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
102
|
+
this.nodes[index].dispatchEvent(mousedownEvent);
|
103
|
+
},
|
104
|
+
|
105
|
+
mouseup: function(index) {
|
106
|
+
var mouseupEvent = document.createEvent('MouseEvents');
|
107
|
+
mouseupEvent.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
108
|
+
this.nodes[index].dispatchEvent(mouseupEvent);
|
109
|
+
},
|
110
|
+
|
99
111
|
click: function (index) {
|
112
|
+
this.mousedown(index);
|
113
|
+
this.mouseup(index);
|
100
114
|
var clickEvent = document.createEvent('MouseEvents');
|
101
115
|
clickEvent.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
102
116
|
this.nodes[index].dispatchEvent(clickEvent);
|
@@ -167,13 +181,13 @@ Capybara = {
|
|
167
181
|
this.trigger(index, "blur");
|
168
182
|
|
169
183
|
} else if (type === "checkbox" || type === "radio") {
|
170
|
-
node.checked
|
171
|
-
|
172
|
-
|
184
|
+
if (node.checked != (value === "true")) {
|
185
|
+
this.click(index)
|
186
|
+
}
|
173
187
|
|
174
188
|
} else if (type === "file") {
|
175
189
|
this.lastAttachedFile = value;
|
176
|
-
this.
|
190
|
+
this.click(index)
|
177
191
|
|
178
192
|
} else {
|
179
193
|
node.value = value;
|
metadata
CHANGED
@@ -1,15 +1,10 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-webkit
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 8
|
9
|
-
- 0
|
10
|
-
version: 0.8.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- thoughtbot
|
14
9
|
- Joe Ferris
|
15
10
|
- Matt Mongeau
|
@@ -18,136 +13,104 @@ authors:
|
|
18
13
|
autorequire:
|
19
14
|
bindir: bin
|
20
15
|
cert_chain: []
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
date: 2012-02-03 00:00:00.000000000Z
|
17
|
+
dependencies:
|
18
|
+
- !ruby/object:Gem::Dependency
|
19
|
+
name: capybara
|
20
|
+
requirement: &2158944240 !ruby/object:Gem::Requirement
|
26
21
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 23
|
31
|
-
segments:
|
32
|
-
- 1
|
33
|
-
- 0
|
34
|
-
- 0
|
22
|
+
requirements:
|
23
|
+
- - ! '>='
|
24
|
+
- !ruby/object:Gem::Version
|
35
25
|
version: 1.0.0
|
36
26
|
- - <
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
|
39
|
-
segments:
|
40
|
-
- 1
|
41
|
-
- 2
|
42
|
-
version: "1.2"
|
43
|
-
requirement: *id001
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '1.2'
|
44
29
|
type: :runtime
|
45
30
|
prerelease: false
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
|
31
|
+
version_requirements: *2158944240
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: json
|
34
|
+
requirement: &2158943060 !ruby/object:Gem::Requirement
|
49
35
|
none: false
|
50
|
-
requirements:
|
51
|
-
- -
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
|
54
|
-
segments:
|
55
|
-
- 0
|
56
|
-
version: "0"
|
57
|
-
requirement: *id002
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
58
40
|
type: :runtime
|
59
41
|
prerelease: false
|
60
|
-
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
|
42
|
+
version_requirements: *2158943060
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rspec
|
45
|
+
requirement: &2158941580 !ruby/object:Gem::Requirement
|
63
46
|
none: false
|
64
|
-
requirements:
|
47
|
+
requirements:
|
65
48
|
- - ~>
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
hash: 23
|
68
|
-
segments:
|
69
|
-
- 2
|
70
|
-
- 6
|
71
|
-
- 0
|
49
|
+
- !ruby/object:Gem::Version
|
72
50
|
version: 2.6.0
|
73
|
-
requirement: *id003
|
74
|
-
type: :development
|
75
|
-
prerelease: false
|
76
|
-
name: rspec
|
77
|
-
- !ruby/object:Gem::Dependency
|
78
|
-
version_requirements: &id004 !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
hash: 3
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
version: "0"
|
87
|
-
requirement: *id004
|
88
51
|
type: :development
|
89
52
|
prerelease: false
|
53
|
+
version_requirements: *2158941580
|
54
|
+
- !ruby/object:Gem::Dependency
|
90
55
|
name: sinatra
|
91
|
-
|
92
|
-
version_requirements: &id005 !ruby/object:Gem::Requirement
|
56
|
+
requirement: &2158940900 !ruby/object:Gem::Requirement
|
93
57
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
|
98
|
-
segments:
|
99
|
-
- 0
|
100
|
-
version: "0"
|
101
|
-
requirement: *id005
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
102
62
|
type: :development
|
103
63
|
prerelease: false
|
64
|
+
version_requirements: *2158940900
|
65
|
+
- !ruby/object:Gem::Dependency
|
104
66
|
name: mini_magick
|
105
|
-
|
106
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
67
|
+
requirement: &2158940440 !ruby/object:Gem::Requirement
|
107
68
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
|
112
|
-
segments:
|
113
|
-
- 0
|
114
|
-
version: "0"
|
115
|
-
requirement: *id006
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
116
73
|
type: :development
|
117
74
|
prerelease: false
|
75
|
+
version_requirements: *2158940440
|
76
|
+
- !ruby/object:Gem::Dependency
|
118
77
|
name: rake
|
119
|
-
|
120
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
78
|
+
requirement: &2158939820 !ruby/object:Gem::Requirement
|
121
79
|
none: false
|
122
|
-
requirements:
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
type: :development
|
85
|
+
prerelease: false
|
86
|
+
version_requirements: *2158939820
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: appraisal
|
89
|
+
requirement: &2158939100 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
123
92
|
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
hash: 15
|
126
|
-
segments:
|
127
|
-
- 0
|
128
|
-
- 4
|
129
|
-
- 0
|
93
|
+
- !ruby/object:Gem::Version
|
130
94
|
version: 0.4.0
|
131
|
-
requirement: *id007
|
132
95
|
type: :development
|
133
96
|
prerelease: false
|
134
|
-
|
97
|
+
version_requirements: *2158939100
|
135
98
|
description:
|
136
99
|
email: support@thoughtbot.com
|
137
100
|
executables: []
|
138
|
-
|
139
|
-
extensions:
|
101
|
+
extensions:
|
140
102
|
- extconf.rb
|
141
103
|
extra_rdoc_files: []
|
142
|
-
|
143
|
-
files:
|
104
|
+
files:
|
144
105
|
- .gitignore
|
145
106
|
- .rspec
|
146
107
|
- Appraisals
|
147
108
|
- CONTRIBUTING.md
|
109
|
+
- ChangeLog
|
148
110
|
- Gemfile
|
149
111
|
- Gemfile.lock
|
150
112
|
- LICENSE
|
113
|
+
- NEWS.md
|
151
114
|
- README.md
|
152
115
|
- Rakefile
|
153
116
|
- bin/Info.plist
|
@@ -247,38 +210,29 @@ files:
|
|
247
210
|
- webkit_server.pro
|
248
211
|
homepage: http://github.com/thoughtbot/capybara-webkit
|
249
212
|
licenses: []
|
250
|
-
|
251
213
|
post_install_message:
|
252
214
|
rdoc_options: []
|
253
|
-
|
254
|
-
require_paths:
|
215
|
+
require_paths:
|
255
216
|
- lib
|
256
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
257
218
|
none: false
|
258
|
-
requirements:
|
259
|
-
- -
|
260
|
-
- !ruby/object:Gem::Version
|
261
|
-
|
262
|
-
|
263
|
-
- 0
|
264
|
-
version: "0"
|
265
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ! '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
266
224
|
none: false
|
267
|
-
requirements:
|
268
|
-
- -
|
269
|
-
- !ruby/object:Gem::Version
|
270
|
-
|
271
|
-
segments:
|
272
|
-
- 0
|
273
|
-
version: "0"
|
225
|
+
requirements:
|
226
|
+
- - ! '>='
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: '0'
|
274
229
|
requirements: []
|
275
|
-
|
276
230
|
rubyforge_project:
|
277
231
|
rubygems_version: 1.8.11
|
278
232
|
signing_key:
|
279
233
|
specification_version: 3
|
280
234
|
summary: Headless Webkit driver for Capybara
|
281
|
-
test_files:
|
235
|
+
test_files:
|
282
236
|
- spec/browser_spec.rb
|
283
237
|
- spec/cookie_jar_spec.rb
|
284
238
|
- spec/driver_rendering_spec.rb
|