casperjs 1.0.0.RC1
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/CHANGELOG.md +179 -0
- data/LICENSE.md +19 -0
- data/README.md +30 -0
- data/bin/bootstrap.js +292 -0
- data/bin/usage.txt +10 -0
- data/casperjs.gemspec +21 -0
- data/modules/casper.js +1679 -0
- data/modules/cli.js +138 -0
- data/modules/clientutils.js +595 -0
- data/modules/colorizer.js +129 -0
- data/modules/events.js +247 -0
- data/modules/injector.js +93 -0
- data/modules/mouse.js +110 -0
- data/modules/querystring.js +187 -0
- data/modules/tester.js +807 -0
- data/modules/utils.js +429 -0
- data/modules/vendors/coffee-script.js +8 -0
- data/modules/xunit.js +123 -0
- data/package.json +35 -0
- data/rubybin/casperjs +57 -0
- data/samples/bbcshots.coffee +64 -0
- data/samples/bbcshots.js +80 -0
- data/samples/cliplay.coffee +19 -0
- data/samples/cliplay.js +21 -0
- data/samples/customevents.coffee +11 -0
- data/samples/customevents.js +13 -0
- data/samples/customlogging.coffee +33 -0
- data/samples/customlogging.js +42 -0
- data/samples/download.coffee +10 -0
- data/samples/download.js +11 -0
- data/samples/dynamic.coffee +60 -0
- data/samples/dynamic.js +65 -0
- data/samples/each.coffee +14 -0
- data/samples/each.js +17 -0
- data/samples/events.coffee +34 -0
- data/samples/events.js +41 -0
- data/samples/extends.coffee +29 -0
- data/samples/extends.js +37 -0
- data/samples/googlelinks.coffee +27 -0
- data/samples/googlelinks.js +33 -0
- data/samples/googlematch.coffee +47 -0
- data/samples/googlematch.js +65 -0
- data/samples/googlepagination.coffee +40 -0
- data/samples/googlepagination.js +51 -0
- data/samples/googletesting.coffee +17 -0
- data/samples/googletesting.js +23 -0
- data/samples/logcolor.coffee +10 -0
- data/samples/logcolor.js +11 -0
- data/samples/metaextract.coffee +23 -0
- data/samples/metaextract.js +29 -0
- data/samples/multirun.coffee +37 -0
- data/samples/multirun.js +56 -0
- data/samples/screenshot.coffee +28 -0
- data/samples/screenshot.js +33 -0
- data/samples/statushandlers.coffee +15 -0
- data/samples/statushandlers.js +19 -0
- data/samples/steptimeout.coffee +37 -0
- data/samples/steptimeout.js +45 -0
- data/samples/timeout.coffee +39 -0
- data/samples/timeout.js +47 -0
- data/tests/run.js +76 -0
- data/tests/site/alert.html +10 -0
- data/tests/site/click.html +40 -0
- data/tests/site/confirm.html +12 -0
- data/tests/site/elementattribute.html +6 -0
- data/tests/site/error.html +10 -0
- data/tests/site/form.html +26 -0
- data/tests/site/global.html +9 -0
- data/tests/site/images/phantom.png +0 -0
- data/tests/site/index.html +17 -0
- data/tests/site/mouse-events.html +47 -0
- data/tests/site/multiple-forms.html +16 -0
- data/tests/site/page1.html +8 -0
- data/tests/site/page2.html +8 -0
- data/tests/site/page3.html +8 -0
- data/tests/site/prompt.html +12 -0
- data/tests/site/resources.html +16 -0
- data/tests/site/result.html +11 -0
- data/tests/site/test.html +10 -0
- data/tests/site/visible.html +17 -0
- data/tests/site/waitFor.html +22 -0
- data/tests/suites/casper/agent.js +24 -0
- data/tests/suites/casper/capture.js +31 -0
- data/tests/suites/casper/click.js +61 -0
- data/tests/suites/casper/confirm.js +21 -0
- data/tests/suites/casper/elementattribute.js +8 -0
- data/tests/suites/casper/encode.js +20 -0
- data/tests/suites/casper/evaluate.js +27 -0
- data/tests/suites/casper/events.js +38 -0
- data/tests/suites/casper/exists.js +9 -0
- data/tests/suites/casper/fetchtext.js +9 -0
- data/tests/suites/casper/flow.coffee +38 -0
- data/tests/suites/casper/formfill.js +69 -0
- data/tests/suites/casper/global.js +9 -0
- data/tests/suites/casper/history.js +21 -0
- data/tests/suites/casper/hooks.js +41 -0
- data/tests/suites/casper/logging.js +38 -0
- data/tests/suites/casper/mouseevents.js +27 -0
- data/tests/suites/casper/onerror.js +19 -0
- data/tests/suites/casper/open.js +73 -0
- data/tests/suites/casper/prompt.js +17 -0
- data/tests/suites/casper/resources.coffee +24 -0
- data/tests/suites/casper/start.js +15 -0
- data/tests/suites/casper/steps.js +32 -0
- data/tests/suites/casper/viewport.js +11 -0
- data/tests/suites/casper/visible.js +17 -0
- data/tests/suites/casper/wait.js +27 -0
- data/tests/suites/casper/xpath.js +32 -0
- data/tests/suites/cli.js +125 -0
- data/tests/suites/clientutils.js +84 -0
- data/tests/suites/coffee.coffee +19 -0
- data/tests/suites/fs.js +36 -0
- data/tests/suites/http_status.js +28 -0
- data/tests/suites/injector.js +64 -0
- data/tests/suites/tester.js +121 -0
- data/tests/suites/utils.js +209 -0
- data/tests/suites/xunit.js +16 -0
- data/tests/testdir/01_a/abc.js +0 -0
- data/tests/testdir/01_a/def.js +0 -0
- data/tests/testdir/02_b/abc.js +0 -0
- data/tests/testdir/03_a.js +0 -0
- data/tests/testdir/03_b.js +0 -0
- data/tests/testdir/04/01_init.js +0 -0
- data/tests/testdir/04/02_do.js +0 -0
- metadata +192 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Capture multiple pages of google search results
|
|
3
|
+
*
|
|
4
|
+
* Usage: $ casperjs googlepagination.coffee my search terms
|
|
5
|
+
*
|
|
6
|
+
* (all arguments will be used as the query)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
var casper = require("casper").create();
|
|
10
|
+
var currentPage = 1;
|
|
11
|
+
|
|
12
|
+
if (casper.cli.args.length === 0) {
|
|
13
|
+
casper
|
|
14
|
+
.echo("Usage: $ casperjs googlepagination.js my search terms")
|
|
15
|
+
.exit(1)
|
|
16
|
+
;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var processPage = function() {
|
|
20
|
+
var url;
|
|
21
|
+
this.echo("capturing page " + currentPage);
|
|
22
|
+
this.capture("google-results-p" + currentPage + ".png");
|
|
23
|
+
|
|
24
|
+
// don't go too far down the rabbit hole
|
|
25
|
+
if (currentPage >= 5) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (this.exists("#pnnext")) {
|
|
30
|
+
currentPage++;
|
|
31
|
+
this.echo("requesting next page: " + currentPage);
|
|
32
|
+
url = this.getCurrentUrl();
|
|
33
|
+
this.thenClick("#pnnext").then(function() {
|
|
34
|
+
this.waitFor(function() {
|
|
35
|
+
return url !== this.getCurrentUrl();
|
|
36
|
+
}, processPage);
|
|
37
|
+
});
|
|
38
|
+
} else {
|
|
39
|
+
this.echo("that's all, folks.");
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
casper.start("http://google.fr/", function() {
|
|
44
|
+
this.fill('form[action="/search"]', {
|
|
45
|
+
q: casper.cli.args.join(" ")
|
|
46
|
+
}, true);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
casper.then(processPage);
|
|
50
|
+
|
|
51
|
+
casper.run();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
casper = require("casper").create
|
|
2
|
+
logLevel: "debug"
|
|
3
|
+
|
|
4
|
+
casper.start "http://www.google.fr/", ->
|
|
5
|
+
@test.assertTitle "Google", "google homepage title is the one expected"
|
|
6
|
+
@test.assertExists 'form[action="/search"]', "main form is found"
|
|
7
|
+
@fill 'form[action="/search"]', q: "foo", true
|
|
8
|
+
|
|
9
|
+
casper.then ->
|
|
10
|
+
@test.assertTitle "foo - Recherche Google", "google title is ok"
|
|
11
|
+
@test.assertUrlMatch /q=foo/, "search term has been submitted"
|
|
12
|
+
@test.assertEval (->
|
|
13
|
+
__utils__.findAll("h3.r").length >= 10
|
|
14
|
+
), "google search for \"foo\" retrieves 10 or more results"
|
|
15
|
+
|
|
16
|
+
casper.run ->
|
|
17
|
+
@test.renderResults true
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var casper = require("casper").create({
|
|
2
|
+
logLevel: "debug"
|
|
3
|
+
});
|
|
4
|
+
|
|
5
|
+
casper.start("http://www.google.fr/", function() {
|
|
6
|
+
this.test.assertTitle("Google", "google homepage title is the one expected");
|
|
7
|
+
this.test.assertExists('form[action="/search"]', "main form is found");
|
|
8
|
+
this.fill('form[action="/search"]', {
|
|
9
|
+
q: "foo"
|
|
10
|
+
}, true);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
casper.then(function() {
|
|
14
|
+
this.test.assertTitle("foo - Recherche Google", "google title is ok");
|
|
15
|
+
this.test.assertUrlMatch(/q=foo/, "search term has been submitted");
|
|
16
|
+
this.test.assertEval((function() {
|
|
17
|
+
return __utils__.findAll("h3.r").length >= 10;
|
|
18
|
+
}), "google search for \"foo\" retrieves 10 or more results");
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
casper.run(function() {
|
|
22
|
+
this.test.renderResults(true);
|
|
23
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
casper = require("casper").create
|
|
2
|
+
verbose: true
|
|
3
|
+
logLevel: "debug"
|
|
4
|
+
|
|
5
|
+
casper.log "this is a debug message", "debug"
|
|
6
|
+
casper.log "and an informative one", "info"
|
|
7
|
+
casper.log "and a warning", "warning"
|
|
8
|
+
casper.log "and an error", "error"
|
|
9
|
+
|
|
10
|
+
casper.exit()
|
data/samples/logcolor.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var casper = require("casper").create({
|
|
2
|
+
verbose: true,
|
|
3
|
+
logLevel: "debug"
|
|
4
|
+
});
|
|
5
|
+
|
|
6
|
+
casper.log("this is a debug message", "debug");
|
|
7
|
+
casper.log("and an informative one", "info");
|
|
8
|
+
casper.log("and a warning", "warning");
|
|
9
|
+
casper.log("and an error", "error");
|
|
10
|
+
|
|
11
|
+
casper.exit();
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
casper = require("casper").create()
|
|
2
|
+
url = casper.cli.get 0
|
|
3
|
+
metas = []
|
|
4
|
+
|
|
5
|
+
if not url
|
|
6
|
+
casper
|
|
7
|
+
.echo("Usage: $ casperjs metaextract.coffee <url>")
|
|
8
|
+
.exit 1
|
|
9
|
+
|
|
10
|
+
casper.start url, ->
|
|
11
|
+
metas = @evaluate ->
|
|
12
|
+
metas = []
|
|
13
|
+
castarray = (arr) -> [].slice.call(arr)
|
|
14
|
+
for elem in castarray document.querySelectorAll "meta"
|
|
15
|
+
meta = {}
|
|
16
|
+
for attr in castarray elem.attributes
|
|
17
|
+
meta[attr.name] = attr.value
|
|
18
|
+
metas.push meta
|
|
19
|
+
metas
|
|
20
|
+
|
|
21
|
+
casper.run ->
|
|
22
|
+
require("utils").dump metas
|
|
23
|
+
this.exit()
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var casper = require("casper").create();
|
|
2
|
+
var url = casper.cli.get(0);
|
|
3
|
+
var metas = [];
|
|
4
|
+
|
|
5
|
+
if (!url) {
|
|
6
|
+
casper
|
|
7
|
+
.echo("Usage: $ casperjs metaextract.js <url>")
|
|
8
|
+
.exit(1)
|
|
9
|
+
;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
casper.start(url, function() {
|
|
13
|
+
metas = this.evaluate(function() {
|
|
14
|
+
var metas = [];
|
|
15
|
+
[].forEach.call(document.querySelectorAll("meta"), function(elem) {
|
|
16
|
+
var meta = {};
|
|
17
|
+
[].slice.call(elem.attributes).forEach(function(attr) {
|
|
18
|
+
meta[attr.name] = attr.value;
|
|
19
|
+
});
|
|
20
|
+
metas.push(meta);
|
|
21
|
+
});
|
|
22
|
+
return metas;
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
casper.run(function() {
|
|
27
|
+
require("utils").dump(metas);
|
|
28
|
+
this.exit();
|
|
29
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
casper = require("casper").create verbose: true
|
|
2
|
+
|
|
3
|
+
countLinks = ->
|
|
4
|
+
document.querySelectorAll('a').length
|
|
5
|
+
|
|
6
|
+
suites = [
|
|
7
|
+
->
|
|
8
|
+
@echo "Suite 1"
|
|
9
|
+
@start "http://google.com/", -> @echo "Page title: #{@getTitle()}"
|
|
10
|
+
@then -> @echo "#{@evaluate(countLinks)} links"
|
|
11
|
+
->
|
|
12
|
+
@echo "Suite 2"
|
|
13
|
+
@start "http://yahoo.com/", -> @echo "Page title: #{@getTitle()}"
|
|
14
|
+
@then -> @echo "#{@evaluate(countLinks)} links"
|
|
15
|
+
->
|
|
16
|
+
@echo "Suite 3"
|
|
17
|
+
@start "http://bing.com/", -> @echo "Page title: #{@getTitle()}"
|
|
18
|
+
@then -> @echo "#{@evaluate(countLinks)} links"
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
casper.start()
|
|
22
|
+
|
|
23
|
+
casper.then ->
|
|
24
|
+
@echo("Starting")
|
|
25
|
+
|
|
26
|
+
currentSuite = 0;
|
|
27
|
+
|
|
28
|
+
check = ->
|
|
29
|
+
if suites[currentSuite]
|
|
30
|
+
suites[currentSuite].call @
|
|
31
|
+
currentSuite++;
|
|
32
|
+
casper.run check
|
|
33
|
+
else
|
|
34
|
+
@echo "All done."
|
|
35
|
+
@exit()
|
|
36
|
+
|
|
37
|
+
casper.run check
|
data/samples/multirun.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var casper = require("casper").create({
|
|
2
|
+
verbose: true
|
|
3
|
+
});
|
|
4
|
+
|
|
5
|
+
var countLinks = function() {
|
|
6
|
+
return document.querySelectorAll('a').length;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
var suites = [
|
|
10
|
+
function() {
|
|
11
|
+
this.echo("Suite 1");
|
|
12
|
+
this.start("http://google.com/", function() {
|
|
13
|
+
this.echo("Page title: " + (this.getTitle()));
|
|
14
|
+
});
|
|
15
|
+
this.then(function() {
|
|
16
|
+
this.echo((this.evaluate(countLinks)) + " links");
|
|
17
|
+
});
|
|
18
|
+
}, function() {
|
|
19
|
+
this.echo("Suite 2");
|
|
20
|
+
this.start("http://yahoo.com/", function() {
|
|
21
|
+
this.echo("Page title: " + (this.getTitle()));
|
|
22
|
+
});
|
|
23
|
+
this.then(function() {
|
|
24
|
+
this.echo((this.evaluate(countLinks)) + " links");
|
|
25
|
+
});
|
|
26
|
+
}, function() {
|
|
27
|
+
this.echo("Suite 3");
|
|
28
|
+
this.start("http://bing.com/", function() {
|
|
29
|
+
this.echo("Page title: " + (this.getTitle()));
|
|
30
|
+
});
|
|
31
|
+
this.then(function() {
|
|
32
|
+
this.echo((this.evaluate(countLinks)) + " links");
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
casper.start();
|
|
38
|
+
|
|
39
|
+
casper.then(function() {
|
|
40
|
+
this.echo("Starting");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
var currentSuite = 0;
|
|
44
|
+
|
|
45
|
+
var check = function() {
|
|
46
|
+
if (suites[currentSuite]) {
|
|
47
|
+
suites[currentSuite].call(this);
|
|
48
|
+
currentSuite++;
|
|
49
|
+
casper.run(check);
|
|
50
|
+
} else {
|
|
51
|
+
this.echo("All done.");
|
|
52
|
+
this.exit();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
casper.run(check);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
###
|
|
2
|
+
This script will capture a screenshot of a twitter account page
|
|
3
|
+
Usage: $ casperjs screenshot.coffee <twitter-account> <filename.[jpg|png|pdf]>
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
casper = require("casper").create
|
|
7
|
+
viewportSize:
|
|
8
|
+
width: 1024
|
|
9
|
+
height: 768
|
|
10
|
+
|
|
11
|
+
twitterAccount = casper.cli.get 0
|
|
12
|
+
filename = casper.cli.get 1
|
|
13
|
+
|
|
14
|
+
if not twitterAccount or not filename or not /\.(png|jpg|pdf)$/i.test filename
|
|
15
|
+
casper
|
|
16
|
+
.echo("Usage: $ casperjs screenshot.coffee <twitter-account> <filename.[jpg|png|pdf]>")
|
|
17
|
+
.exit(1)
|
|
18
|
+
|
|
19
|
+
casper.start "https://twitter.com/#!/#{twitterAccount}", ->
|
|
20
|
+
@waitForSelector ".tweet-row", (->
|
|
21
|
+
@captureSelector filename, "html"
|
|
22
|
+
@echo "Saved screenshot of #{@getCurrentUrl()} to #{filename}"
|
|
23
|
+
), (->
|
|
24
|
+
@die("Timeout reached. Fail whale?")
|
|
25
|
+
@exit()
|
|
26
|
+
), 12000
|
|
27
|
+
|
|
28
|
+
casper.run()
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This script will capture a screenshot of a twitter account page
|
|
3
|
+
* Usage: $ casperjs screenshot.coffee <twitter-account> <filename.[jpg|png|pdf]>
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
var casper = require("casper").create({
|
|
7
|
+
viewportSize: {
|
|
8
|
+
width: 1024,
|
|
9
|
+
height: 768
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var twitterAccount = casper.cli.get(0);
|
|
14
|
+
var filename = casper.cli.get(1);
|
|
15
|
+
|
|
16
|
+
if (!twitterAccount || !filename || !/\.(png|jpg|pdf)$/i.test(filename)) {
|
|
17
|
+
casper
|
|
18
|
+
.echo("Usage: $ casperjs screenshot.coffee <twitter-account> <filename.[jpg|png|pdf]>")
|
|
19
|
+
.exit(1)
|
|
20
|
+
;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
casper.start("https://twitter.com/#!/" + twitterAccount, function() {
|
|
24
|
+
this.waitForSelector(".tweet-row", (function() {
|
|
25
|
+
this.captureSelector(filename, "html");
|
|
26
|
+
this.echo("Saved screenshot of " + (this.getCurrentUrl()) + " to " + filename);
|
|
27
|
+
}), (function() {
|
|
28
|
+
this.die("Timeout reached. Fail whale?");
|
|
29
|
+
this.exit();
|
|
30
|
+
}), 12000);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
casper.run();
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
###
|
|
2
|
+
This script will add a custom HTTP status code handler, here for 404 pages.
|
|
3
|
+
###
|
|
4
|
+
|
|
5
|
+
casper = require("casper").create
|
|
6
|
+
httpStatusHandlers:
|
|
7
|
+
404: (self, resource) ->
|
|
8
|
+
@echo "Resource at #{resource.url} not found (404)", "COMMENT"
|
|
9
|
+
verbose: true
|
|
10
|
+
|
|
11
|
+
casper.start "http://www.google.com/plop", ->
|
|
12
|
+
@echo "Done."
|
|
13
|
+
@exit()
|
|
14
|
+
|
|
15
|
+
casper.run()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This script will add a custom HTTP status code handler, here for 404 pages.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
var casper = require("casper").create({
|
|
6
|
+
httpStatusHandlers: {
|
|
7
|
+
404: function(self, resource) {
|
|
8
|
+
this.echo("Resource at " + resource.url + " not found (404)", "COMMENT");
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
verbose: true
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
casper.start("http://www.google.com/plop", function() {
|
|
15
|
+
this.echo("Done.");
|
|
16
|
+
this.exit();
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
casper.run();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
failed = []
|
|
2
|
+
start = null
|
|
3
|
+
links = [
|
|
4
|
+
"http://google.com/"
|
|
5
|
+
"http://akei.com/"
|
|
6
|
+
"http://lemonde.fr/"
|
|
7
|
+
"http://liberation.fr/"
|
|
8
|
+
"http://cdiscount.fr/"
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
casper = require("casper").create
|
|
12
|
+
onStepTimeout: ->
|
|
13
|
+
failed.push @requestUrl
|
|
14
|
+
@test.fail "#{@requestUrl} loads in less than #{timeout}ms."
|
|
15
|
+
|
|
16
|
+
casper.on "load.finished", ->
|
|
17
|
+
@echo "#{@requestUrl} loaded in #{new Date() - start}ms", "PARAMETER"
|
|
18
|
+
|
|
19
|
+
timeout = ~~casper.cli.get(0)
|
|
20
|
+
timeout = 1000 if timeout < 1
|
|
21
|
+
casper.options.stepTimeout = timeout
|
|
22
|
+
|
|
23
|
+
casper.echo "Testing with timeout=#{timeout}ms, please be patient."
|
|
24
|
+
|
|
25
|
+
casper.start()
|
|
26
|
+
|
|
27
|
+
casper.each links, (self, link) ->
|
|
28
|
+
@then ->
|
|
29
|
+
@test.comment "Loading #{link}"
|
|
30
|
+
start = new Date()
|
|
31
|
+
@open link
|
|
32
|
+
@then ->
|
|
33
|
+
if @requestUrl not in failed
|
|
34
|
+
@test.pass "#{@requestUrl} loaded in less than #{timeout}ms."
|
|
35
|
+
|
|
36
|
+
casper.run ->
|
|
37
|
+
@test.renderResults true
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var failed = [];
|
|
2
|
+
var start = null;
|
|
3
|
+
var links = [
|
|
4
|
+
"http://google.com/'",
|
|
5
|
+
"http://akei.com/'",
|
|
6
|
+
"http://lemonde.fr/'",
|
|
7
|
+
"http://liberation.fr/'",
|
|
8
|
+
"http://cdiscount.fr/"
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
var casper = require("casper").create({
|
|
12
|
+
onStepTimeout: function() {
|
|
13
|
+
failed.push(this.requestUrl);
|
|
14
|
+
this.test.fail(this.requestUrl + " loads in less than " + timeout + "ms.");
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
casper.on("load.finished", function() {
|
|
19
|
+
this.echo(this.requestUrl + " loaded in " + (new Date() - start) + "ms", "PARAMETER");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
var timeout = ~~casper.cli.get(0);
|
|
23
|
+
casper.options.stepTimeout = timeout > 0 ? timeout : 1000;
|
|
24
|
+
|
|
25
|
+
casper.echo("Testing with timeout=" + casper.options.stepTimeout + "ms, please be patient.");
|
|
26
|
+
|
|
27
|
+
casper.start();
|
|
28
|
+
|
|
29
|
+
casper.each(links, function(casper, link) {
|
|
30
|
+
this.then(function() {
|
|
31
|
+
this.test.comment("Loading " + link);
|
|
32
|
+
start = new Date();
|
|
33
|
+
this.open(link);
|
|
34
|
+
});
|
|
35
|
+
this.then(function() {
|
|
36
|
+
var message = this.requestUrl + " loads in less than " + timeout + "ms.";
|
|
37
|
+
if (failed.indexOf(this.requestUrl) === -1) {
|
|
38
|
+
this.test.pass(message);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
casper.run(function() {
|
|
44
|
+
this.test.renderResults(true);
|
|
45
|
+
});
|