Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
John McEleney
/
casperjs
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit
dee23d57
...
dee23d57f4a969fc1443a4d47bfdded02b9e92c7
authored
2012-05-28 00:48:28 +0200
by
Nicolas Perriault
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'master' into tester-refactor
2 parents
df1009e1
941ba94c
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
136 additions
and
127 deletions
modules/casper.js
samples/customevents.js
samples/customlogging.js
samples/download.js
samples/dynamic.js
samples/googlelinks.js
samples/googlematch.coffee
samples/googlematch.js
samples/googletesting.js
samples/multirun.js
samples/steptimeout.coffee
samples/steptimeout.js
samples/timeout.js
modules/casper.js
View file @
dee23d5
...
...
@@ -66,7 +66,6 @@ var Casper = function Casper(options) {
// default options
this
.
defaults
=
{
clientScripts
:
[],
faultTolerant
:
true
,
logLevel
:
"error"
,
httpStatusHandlers
:
{},
onAlert
:
null
,
...
...
@@ -226,11 +225,7 @@ Casper.prototype.checkStep = function checkStep(self, onComplete) {
clearInterval
(
self
.
checker
);
self
.
emit
(
'run.complete'
);
if
(
utils
.
isFunction
(
onComplete
))
{
try
{
onComplete
.
call
(
self
,
self
);
}
catch
(
err
)
{
self
.
log
(
"Could not complete final step: "
+
err
,
"error"
);
}
}
else
{
// default behavior is to exit
self
.
exit
();
...
...
@@ -375,9 +370,11 @@ Casper.prototype.each = function each(array, fn) {
this
.
log
(
"each() only works with arrays"
,
"error"
);
return
this
;
}
array
.
forEach
.
call
(
this
,
function
_forEach
(
item
,
i
)
{
fn
.
call
(
this
,
this
,
item
,
i
);
(
function
_each
(
self
)
{
array
.
forEach
(
function
_forEach
(
item
,
i
)
{
fn
.
call
(
self
,
self
,
item
,
i
);
});
})(
this
);
return
this
;
};
...
...
@@ -841,16 +838,7 @@ Casper.prototype.runStep = function runStep(step) {
},
this
.
options
.
stepTimeout
,
this
,
new
Date
().
getTime
(),
this
.
step
);
}
this
.
emit
(
'step.start'
,
step
);
try
{
stepResult
=
step
.
call
(
this
,
this
);
}
catch
(
e
)
{
this
.
emit
(
'step.error'
,
e
);
if
(
this
.
options
.
faultTolerant
)
{
this
.
log
(
"Step error: "
+
e
,
"error"
);
}
else
{
throw
e
;
}
}
if
(
utils
.
isFunction
(
this
.
options
.
onStepComplete
))
{
this
.
options
.
onStepComplete
.
call
(
this
,
this
,
stepResult
);
}
...
...
samples/customevents.js
View file @
dee23d5
...
...
@@ -2,12 +2,12 @@ var casper = require('casper').create();
// listening to a custom event
casper
.
on
(
'google.loaded'
,
function
(
title
)
{
casper
.
echo
(
'Google page title is '
+
title
);
this
.
echo
(
'Google page title is '
+
title
);
});
casper
.
start
(
'http://google.com/'
,
function
(
self
)
{
casper
.
start
(
'http://google.com/'
,
function
()
{
// emitting a custom event
self
.
emit
(
'google.loaded'
,
self
.
getTitle
());
this
.
emit
(
'google.loaded'
,
this
.
getTitle
());
});
casper
.
run
();
...
...
samples/customlogging.js
View file @
dee23d5
...
...
@@ -31,6 +31,6 @@ var casper = require('casper').create({
casper
.
logLevels
=
[
'verbose'
].
concat
(
casper
.
logLevels
);
// test our new logger with google
casper
.
start
(
'http://www.google.com/'
).
run
(
function
(
self
)
{
self
.
exit
();
casper
.
start
(
'http://www.google.com/'
).
run
(
function
()
{
this
.
exit
();
});
...
...
samples/download.js
View file @
dee23d5
...
...
@@ -4,8 +4,8 @@ var casper = require('casper').create({
verbose
:
true
});
casper
.
start
(
'http://www.google.fr/'
,
function
(
self
)
{
self
.
echo
(
self
.
base64encode
(
'http://www.google.fr/images/srpr/logo3w.png'
));
casper
.
start
(
'http://www.google.fr/'
,
function
()
{
this
.
echo
(
self
.
base64encode
(
'http://www.google.fr/images/srpr/logo3w.png'
));
});
casper
.
run
();
...
...
samples/dynamic.js
View file @
dee23d5
...
...
@@ -4,6 +4,7 @@ if (phantom.casperArgs.args.length !== 1) {
}
var
casper
=
require
(
'casper'
).
create
({
logLevel
:
"debug"
,
verbose
:
true
});
...
...
@@ -30,38 +31,38 @@ var links = [
];
// Just opens the page and prints the title
var
start
=
function
(
self
,
link
)
{
self
.
start
(
link
,
function
(
self
)
{
self
.
echo
(
'Page title: '
+
self
.
getTitle
());
var
start
=
function
(
link
)
{
this
.
start
(
link
,
function
(
)
{
this
.
echo
(
'Page title: '
+
this
.
getTitle
());
});
};
// Get the links, and add them to the links array
// (It could be done all in one step, but it is intentionally splitted)
var
addLinks
=
function
(
link
)
{
this
.
then
(
function
(
self
)
{
var
found
=
self
.
evaluate
(
searchLinks
);
self
.
echo
(
found
.
length
+
" links found on "
+
link
);
this
.
then
(
function
()
{
var
found
=
this
.
evaluate
(
searchLinks
);
this
.
echo
(
found
.
length
+
" links found on "
+
link
);
links
=
links
.
concat
(
found
);
});
};
casper
.
start
().
then
(
function
(
self
)
{
self
.
echo
(
'Starting'
);
casper
.
start
().
then
(
function
()
{
this
.
echo
(
'Starting'
);
});
var
currentLink
=
0
;
// As long as it has a next link, and is under the maximum limit, will keep running
function
check
(
self
)
{
function
check
()
{
if
(
links
[
currentLink
]
&&
currentLink
<
upTo
)
{
self
.
echo
(
'--- Link '
+
currentLink
+
' ---'
);
start
(
self
,
links
[
currentLink
]);
addLinks
.
call
(
self
,
links
[
currentLink
]);
this
.
echo
(
'--- Link '
+
currentLink
+
' ---'
);
start
.
call
(
this
,
links
[
currentLink
]);
addLinks
.
call
(
this
,
links
[
currentLink
]);
currentLink
++
;
self
.
run
(
check
);
this
.
run
(
check
);
}
else
{
self
.
echo
(
'All done.'
).
exit
();
this
.
echo
(
'All done.'
).
exit
();
}
}
...
...
samples/googlelinks.js
View file @
dee23d5
...
...
@@ -8,25 +8,25 @@ function getLinks() {
});
}
casper
.
start
(
'http://google.fr/'
,
function
(
self
)
{
casper
.
start
(
'http://google.fr/'
,
function
()
{
// search for 'casperjs' from google form
self
.
fill
(
'form[action="/search"]'
,
{
q
:
'casperjs'
},
true
);
this
.
fill
(
'form[action="/search"]'
,
{
q
:
'casperjs'
},
true
);
});
casper
.
then
(
function
(
self
)
{
casper
.
then
(
function
()
{
// aggregate results for the 'casperjs' search
links
=
self
.
evaluate
(
getLinks
);
links
=
this
.
evaluate
(
getLinks
);
// now search for 'phantomjs' by fillin the form again
self
.
fill
(
'form[action="/search"]'
,
{
q
:
'phantomjs'
},
true
);
this
.
fill
(
'form[action="/search"]'
,
{
q
:
'phantomjs'
},
true
);
});
casper
.
then
(
function
(
self
)
{
casper
.
then
(
function
()
{
// aggregate results for the 'phantomjs' search
links
=
links
.
concat
(
self
.
evaluate
(
getLinks
));
links
=
links
.
concat
(
this
.
evaluate
(
getLinks
));
});
casper
.
run
(
function
(
self
)
{
casper
.
run
(
function
()
{
// echo results in some pretty fashion
self
.
echo
(
links
.
length
+
' links found:'
);
self
.
echo
(
' - '
+
links
.
join
(
'\n - '
)).
exit
();
this
.
echo
(
links
.
length
+
' links found:'
);
this
.
echo
(
' - '
+
links
.
join
(
'\n - '
)).
exit
();
});
...
...
samples/googlematch.coffee
View file @
dee23d5
...
...
@@ -35,7 +35,7 @@ casper.each terms, (self, term) ->
@
then
->
score
=
@
fetchScore
()
scores
.
push
term
:
term
,
score
:
score
self
.
echo
"
#{
term
}
:
#{
score
}
"
@
echo
"
#{
term
}
:
#{
score
}
"
casper
.
run
->
winner
=
scores
[
0
]
...
...
samples/googlematch.js
View file @
dee23d5
...
...
@@ -16,7 +16,7 @@ var casper = new require('casper').create({
casper
.
fetchScore
=
function
()
{
return
this
.
evaluate
(
function
()
{
var
result
=
document
.
querySelector
(
'#resultStats'
).
innerText
;
return
parseInt
(
/Environ
([
0-9
\s]{1,})
.*/
.
exec
(
result
)[
1
].
replace
(
/
\s
/g
,
''
));
return
parseInt
(
/Environ
([
0-9
\s]{1,})
.*/
.
exec
(
result
)[
1
].
replace
(
/
\s
/g
,
''
)
,
10
);
});
};
...
...
@@ -31,24 +31,31 @@ casper.echo('Let the match begin!');
casper
.
start
(
"http://google.fr/"
);
casper
.
each
(
terms
,
function
(
self
,
term
,
i
)
{
self
.
then
(
function
(
self
)
{
self
.
fill
(
'form[action="/search"]'
,
{
q
:
term
},
true
);
}).
then
(
function
(
self
)
{
var
score
=
self
.
fetchScore
();
casper
.
each
(
terms
,
function
(
casper
,
term
,
i
)
{
this
.
echo
(
'Fecthing score for '
+
term
);
this
.
then
(
function
()
{
this
.
fill
(
'form[action="/search"]'
,
{
q
:
term
},
true
);
});
this
.
then
(
function
()
{
var
score
=
this
.
fetchScore
();
scores
.
push
({
term
:
term
,
score
:
score
});
self
.
echo
(
term
+
': '
+
score
);
this
.
echo
(
term
+
': '
+
score
);
});
});
casper
.
run
(
function
(
self
)
{
casper
.
run
(
function
()
{
if
(
scores
.
length
===
0
)
{
this
.
echo
(
'No result found'
).
exit
();
}
var
winner
=
scores
[
0
];
for
(
var
i
=
0
,
len
=
scores
.
length
;
i
<
len
;
i
++
)
if
(
scores
[
i
].
score
>
winner
.
score
)
winner
=
scores
[
i
];
self
.
echo
(
'winner is "'
+
winner
.
term
+
'" with '
+
winner
.
score
+
' results'
);
self
.
exit
();
scores
.
forEach
(
function
(
score
)
{
if
(
score
.
score
>
winner
.
score
)
{
winner
=
score
.
score
;
}
});
this
.
echo
(
'winner is "'
+
winner
.
term
+
'" with '
+
winner
.
score
+
' results'
);
this
.
exit
();
});
...
...
samples/googletesting.js
View file @
dee23d5
...
...
@@ -2,22 +2,22 @@ var casper = require('casper').create({
logLevel
:
"debug"
});
casper
.
start
(
'http://www.google.fr/'
,
function
(
self
)
{
self
.
test
.
assertTitle
(
'Google'
,
'google homepage title is the one expected'
);
self
.
test
.
assertExists
(
'form[action="/search"]'
,
'main form is found'
);
self
.
fill
(
'form[action="/search"]'
,
{
casper
.
start
(
'http://www.google.fr/'
,
function
()
{
this
.
test
.
assertTitle
(
'Google'
,
'google homepage title is the one expected'
);
this
.
test
.
assertExists
(
'form[action="/search"]'
,
'main form is found'
);
this
.
fill
(
'form[action="/search"]'
,
{
q
:
'foo'
},
true
);
});
casper
.
then
(
function
(
self
)
{
self
.
test
.
assertTitle
(
'foo - Recherche Google'
,
'google title is ok'
);
self
.
test
.
assertUrlMatch
(
/q=foo/
,
'search term has been submitted'
);
self
.
test
.
assertEval
(
function
()
{
casper
.
then
(
function
()
{
this
.
test
.
assertTitle
(
'foo - Recherche Google'
,
'google title is ok'
);
this
.
test
.
assertUrlMatch
(
/q=foo/
,
'search term has been submitted'
);
this
.
test
.
assertEval
(
function
()
{
return
__utils__
.
findAll
(
'h3.r'
).
length
>=
10
;
},
'google search for "foo" retrieves 10 or more results'
);
});
casper
.
run
(
function
(
self
)
{
self
.
test
.
renderResults
(
true
);
casper
.
run
(
function
()
{
this
.
test
.
renderResults
(
true
);
});
...
...
samples/multirun.js
View file @
dee23d5
...
...
@@ -7,45 +7,45 @@ function countLinks() {
}
var
suites
=
[
function
(
self
)
{
self
.
echo
(
'Suite 1'
);
self
.
start
(
'http://google.com/'
,
function
(
self
)
{
self
.
echo
(
'Page title: '
+
self
.
getTitle
());
}).
then
(
function
(
self
)
{
self
.
echo
(
self
.
evaluate
(
countLinks
)
+
' links'
);
function
()
{
this
.
echo
(
'Suite 1'
);
this
.
start
(
'http://google.com/'
,
function
(
)
{
this
.
echo
(
'Page title: '
+
this
.
getTitle
());
}).
then
(
function
()
{
this
.
echo
(
this
.
evaluate
(
countLinks
)
+
' links'
);
});
},
function
(
self
)
{
self
.
echo
(
'Suite 2'
);
self
.
start
(
'http://yahoo.com/'
,
function
(
self
)
{
self
.
echo
(
'Page title: '
+
self
.
getTitle
());
}).
then
(
function
(
self
)
{
self
.
echo
(
self
.
evaluate
(
countLinks
)
+
' links'
);
function
()
{
this
.
echo
(
'Suite 2'
);
this
.
start
(
'http://yahoo.com/'
,
function
(
)
{
this
.
echo
(
'Page title: '
+
this
.
getTitle
());
}).
then
(
function
()
{
this
.
echo
(
this
.
evaluate
(
countLinks
)
+
' links'
);
});
},
function
(
self
)
{
self
.
echo
(
'Suite 3'
);
self
.
start
(
'http://bing.com/'
,
function
(
self
)
{
self
.
echo
(
'Page title: '
+
self
.
getTitle
());
}).
then
(
function
(
self
)
{
self
.
echo
(
self
.
evaluate
(
countLinks
)
+
' links'
);
function
()
{
this
.
echo
(
'Suite 3'
);
this
.
start
(
'http://bing.com/'
,
function
(
)
{
this
.
echo
(
'Page title: '
+
this
.
getTitle
());
}).
then
(
function
()
{
this
.
echo
(
this
.
evaluate
(
countLinks
)
+
' links'
);
});
}
];
casper
.
start
().
then
(
function
(
self
)
{
self
.
echo
(
'Starting'
);
casper
.
start
().
then
(
function
()
{
this
.
echo
(
'Starting'
);
});
var
currentSuite
=
0
;
function
check
(
self
)
{
function
check
()
{
if
(
suites
[
currentSuite
])
{
suites
[
currentSuite
]
(
casper
);
suites
[
currentSuite
]
.
call
(
this
);
currentSuite
++
;
casper
.
run
(
check
);
}
else
{
self
.
echo
(
'All done.'
).
exit
();
this
.
echo
(
'All done.'
).
exit
();
}
}
...
...
samples/steptimeout.coffee
View file @
dee23d5
failed
=
[];
casper
=
require
(
'casper'
).
create
onStepTimeout
:
->
failed
.
push
@
requestUrl
failed
=
[]
start
=
null
links
=
[
'http://google.com/'
'http://akei.com/'
...
...
@@ -11,20 +8,29 @@ links = [
'http://cdiscount.fr/'
]
casper
=
require
(
'casper'
).
create
onStepTimeout
:
->
failed
.
push
@
requestUrl
@
test
.
fail
"
#{
@
requestUrl
}
loads in less than
#{
timeout
}
ms."
casper
.
on
'load.finished'
,
->
@
echo
"
#{
@
requestUrl
}
loaded in
#{
new
Date
()
-
start
}
ms"
,
'PARAMETER'
timeout
=
~~
casper
.
cli
.
get
(
0
)
timeout
=
1000
if
timeout
<
1
casper
.
options
.
stepTimeout
=
timeout
casper
.
echo
"Testing with timeout=
#{
casper
.
options
.
stepTimeout
}
ms
."
casper
.
echo
"Testing with timeout=
#{
timeout
}
ms, please be patient
."
casper
.
start
()
casper
.
each
links
,
(
self
,
link
)
->
@
test
.
comment
"Adding
#{
link
}
to test suite"
@
thenOpen
link
,
->
if
@
requestUrl
in
failed
@
test
.
fail
"
#{
@
requestUrl
}
loaded in less than
#{
timeout
}
ms."
else
@
then
->
@
test
.
comment
"Loading
#{
link
}
"
start
=
new
Date
()
@
open
link
@
then
->
if
@
requestUrl
not
in
failed
@
test
.
pass
"
#{
@
requestUrl
}
loaded in less than
#{
timeout
}
ms."
casper
.
run
->
@
test
.
renderResults
true
...
...
samples/steptimeout.js
View file @
dee23d5
var
failed
=
[];
var
casper
=
require
(
'casper'
).
create
({
onStepTimeout
:
function
(
self
)
{
failed
.
push
(
self
.
requestUrl
);
}
});
var
start
=
null
;
var
links
=
[
'http://google.com/'
,
'http://akei.com/'
,
...
...
@@ -14,25 +8,38 @@ var links = [
'http://cdiscount.fr/'
];
var
casper
=
require
(
'casper'
).
create
({
onStepTimeout
:
function
()
{
failed
.
push
(
this
.
requestUrl
);
this
.
test
.
fail
(
this
.
requestUrl
+
" loads in less than "
+
timeout
+
"ms."
);
}
});
casper
.
on
(
'load.finished'
,
function
()
{
this
.
echo
(
this
.
requestUrl
+
' loaded in '
+
(
new
Date
()
-
start
)
+
'ms'
,
'PARAMETER'
);
});
var
timeout
=
~~
casper
.
cli
.
get
(
0
);
casper
.
options
.
stepTimeout
=
timeout
>
0
?
timeout
:
1000
;
casper
.
echo
(
'Testing with timeout='
+
casper
.
options
.
stepTimeout
+
'ms.'
);
casper
.
echo
(
'Testing with timeout='
+
casper
.
options
.
stepTimeout
+
'ms
, please be patient
.'
);
casper
.
start
();
casper
.
each
(
links
,
function
(
self
,
link
)
{
self
.
test
.
comment
(
'Adding '
+
link
+
' to test suite'
);
self
.
thenOpen
(
link
,
function
(
self
)
{
var
testStatus
=
self
.
test
.
pass
;
if
(
failed
.
indexOf
(
self
.
requestUrl
)
>
-
1
)
{
self
.
test
.
fail
(
self
.
requestUrl
);
}
else
{
self
.
test
.
pass
(
self
.
requestUrl
);
casper
.
each
(
links
,
function
(
casper
,
link
)
{
this
.
then
(
function
()
{
this
.
test
.
comment
(
'Loading '
+
link
);
start
=
new
Date
();
this
.
open
(
link
);
});
this
.
then
(
function
()
{
var
message
=
this
.
requestUrl
+
" loads in less than "
+
timeout
+
"ms."
;
if
(
failed
.
indexOf
(
this
.
requestUrl
)
===
-
1
)
{
this
.
test
.
pass
(
message
);
}
});
});
casper
.
run
(
function
(
self
)
{
self
.
test
.
renderResults
(
true
);
casper
.
run
(
function
()
{
this
.
test
.
renderResults
(
true
);
});
...
...
samples/timeout.js
View file @
dee23d5
...
...
@@ -15,8 +15,8 @@
* YES!
*/
var
casper
=
require
(
'casper'
).
create
({
onTimeout
:
function
(
self
)
{
self
.
echo
(
'NOPE.'
,
'RED_BAR'
).
exit
();
onTimeout
:
function
()
{
this
.
echo
(
'NOPE.'
,
'RED_BAR'
).
exit
();
}
});
...
...
@@ -30,8 +30,8 @@ if (timeout < 1) {
casper
.
echo
(
'Will google.com load in less than '
+
timeout
+
'ms?'
);
casper
.
options
.
timeout
=
timeout
;
casper
.
start
(
'http://www.google.com/'
,
function
(
self
)
{
self
.
echo
(
'YES!'
,
'GREEN_BAR'
).
exit
();
casper
.
start
(
'http://www.google.com/'
,
function
()
{
this
.
echo
(
'YES!'
,
'GREEN_BAR'
).
exit
();
});
casper
.
run
();
...
...
Please
register
or
sign in
to post a comment