Commit cd1fab5c cd1fab5c6f99d15e9d9f8759d6cfb30f92f28c21 by Nicolas Perriault

bump 1.1-beta1

1 parent a29acfdd
1 CasperJS Changelog 1 [This file has moved to Github](https://github.com/n1k0/casperjs/releases)
2 ==================
3
4 XXXX-XX-XX, v1.1
5 ----------------
6
7 This version is yet to be released, and will possibly be tagged as 2.0 as not-so-backward-compatible refactoring occured on the `master` branch. I don't know yet.
8
9 ### Important Changes & Caveats
10
11 #### Minimum PhantomJS version
12
13 **PhantomJS 1.8.1 or later is required for 1.1.**
14
15 #### Support of Gecko, with SlimerJS
16
17 CasperJS can now be launched with [SlimerJS](http://slimerjs.org) instead of PhantomJS.
18 It allows you to execute tests with the rendering engine of Firefox. Just launch CasperJS
19 with the flag `--engine=slimerjs`.
20
21 SlimerJS 0.8 or later is required.
22
23 #### `require()` in custom modules
24
25 CasperJS 1.1 now internally uses PhantomJS' native `require()` function, but it has side effect if you write your own casperjs modules; in any casperjs module, you now have to use the new global `patchRequire()` function first:
26
27 ```js
28 // casperjs module code
29 var require = patchRequire(require);
30 // now you can require casperjs builtins
31 var utils = require('utils');
32 exports = {
33 // ...
34 };
35 ```
36
37 **Note:** you don't have to use `patchRequire()` in a standard casperjs script.
38
39 #### Testing framework refactoring
40
41 A new `Tester.begin()` method has been introduced to help organizing tests better:
42
43 ```js
44 function Cow() {
45 this.mowed = false;
46 this.moo = function moo() {
47 this.mowed = true; // mootable state: don't do that
48 return 'moo!';
49 };
50 }
51
52 // unit style synchronous test case
53 casper.test.begin('Cow can moo', 2, function suite(test) {
54 var cow = new Cow();
55 test.assertEquals(cow.moo(), 'moo!');
56 test.assert(cow.mowed);
57 test.done();
58 });
59
60 // asynchronous test case
61 casper.test.begin('Casperjs.org is navigable', 2, function suite(test) {
62 casper.start('http://casperjs.org/', function() {
63 test.assertTitleMatches(/casperjs/i);
64 this.clickLabel('Testing');
65 });
66
67 casper.then(function() {
68 test.assertUrlMatches(/testing\.html$/);
69 });
70
71 casper.run(function() {
72 test.done();
73 });
74 });
75 ```
76
77 [`Tester#setUp()`](docs.casperjs.org/en/latest/modules/tester.html#setup) and [`Tester#tearDown()`](docs.casperjs.org/en/latest/modules/tester.html#teardown) methods have been also added in order to ease the definition of operations to be performed before and after each test defined using `Tester#begin()`:
78
79 ```js
80 casper.test.setUp(function() {
81 console.log('executed before each test');
82 });
83
84 casper.test.tearDown(function() {
85 console.log('executed after each test');
86 });
87 ```
88
89 Both can work asynchronously as well of you define the `done` argument:
90
91 ```js
92 casper.test.setUp(function(done) {
93 setTimeout(function() {
94 console.log('asynchronously executed before each test');
95 done();
96 }, 1000);
97 });
98
99 casper.test.tearDown(function(done) {
100 setTimeout(function() {
101 console.log('asynchronously executed after each test');
102 done();
103 }, 1000);
104 });
105 ```
106
107 `Tester#begin()` itself has also local `setUp()` and `tearDown()` capabilities if you pass it a configuration object instead of a function:
108
109 ```js
110 casper.test.begin('range tests', 1, {
111 range: [1, 2],
112
113 setUp: function(test) {
114 this.range.push(3);
115 },
116
117 tearDown: function(test) {
118 range = [];
119 },
120
121 test: function(test) {
122 test.assertEquals(range.length, 3);
123 test.done();
124 }
125 });
126 ```
127
128 Scraping and testing are now better separated in CasperJS. That involves breaking up BC on some points though:
129
130 - The Casper object won't be created with a `test` reference if not invoked using the [`casperjs test` command](http://casperjs.org/testing.html#casper-test-command), therefore the ability to run any test without calling it has been dropped. I know, get over it.
131 - Passing the planned number of tests to `casper.done()` has been dropped as well, because `done()` may be never called at all when big troubles happen; rather use the new `begin()` method and provide the expected number of tests using the second argument:
132
133 ```js
134 casper.test.begin("Planning 4 tests", 4, function(test) {
135 [1, 2, 3, 4].forEach(function() {
136 test.assert(true);
137 });
138 test.done();
139 });
140 ```
141
142 Last, all the casper test suites have been upgraded to use the new testing features, you may want to have a look at the changes.
143
144 #### Request abortion
145
146 When using PhantomJS >=1.9.0, you can now abort outgoing requests:
147
148 ```js
149 casper.on('page.resource.requested', function(requestData, request) {
150 if (requestData.url.indexOf('http://adserver.com') === 0) {
151 request.abort();
152 }
153 });
154 ```
155
156 ### Bugfixes & enhancements
157
158 - heavy lifting of casperjs bootstrap script
159 - closed [#482](https://github.com/n1k0/casperjs/issues/482) - support of Gecko (Firefox's engine) with [SlimerJS](http://slimerjs.org): new option --engine=slimerjs (experimental)
160 - fixed [#387](https://github.com/n1k0/casperjs/issues/387) - Setting viewport isn't quite synchronous
161 - fixed [#410](https://github.com/n1k0/casperjs/issues/410) - trigger `mousedown` and `mousedown` events on click
162 - fixed [#433](https://github.com/n1k0/casperjs/issues/433) - `assertField("field", "")` will always pass even though the `field` doesn't exist
163 - closed [#392](https://github.com/n1k0/casperjs/issues/392) - `--direct` & `--log-level` options available for the `casperjs` executable
164 - closed [#350](https://github.com/n1k0/casperjs/issues/350) - Add a [`Casper#waitForSelectorTextChange()`](http://docs.casperjs.org/en/latest/modules/casper.html#waitforselectortextchange) method
165 - Added [`Casper#bypass`](http://docs.casperjs.org/en/latest/modules/casper.html#bypass), [`Casper#thenBypass`](http://docs.casperjs.org/en/latest/modules/casper.html#thenbypass), [`Casper#thenBypassIf`](http://docs.casperjs.org/en/latest/modules/casper.html#thenbypassif), [`Casper#thenBypassUnless`](http://docs.casperjs.org/en/latest/modules/casper.html#thenbypassunless) methods
166 - Added [`Tester#skip`](http://docs.casperjs.org/en/latest/modules/tester.html#skip) method
167 - Added [`Casper#eachThen()`](http://docs.casperjs.org/en/latest/modules/casper.html#eachThen)
168 - merged [#427](https://github.com/n1k0/casperjs/issues/427) - Added `keepFocus` option to `Casper#sendKeys()`
169 - fixed [#441](https://github.com/n1k0/casperjs/issues/441) - added `--ssl-protocol` option support to the `casperjs` executable
170 - fixed [#452](https://github.com/n1k0/casperjs/pull/452) - allow uppercase http methods in `Casper#open()`
171 - fixed [#521](https://github.com/n1k0/casperjs/issue/521) - `sendKeys` for inputs without text attribute should not be restricted
172 - Added [`Casper#fillSelectors()`](http://docs.casperjs.org/en/latest/modules/casper.html#fillselectors) and [`Casper#fillXPath()`](http://docs.casperjs.org/en/latest/modules/casper.html#fillxpath)
173 - Added [`Casper#getElementsAttribute()`](http://docs.casperjs.org/en/latest/modules/casper.html#getelementsattribute) and [`Casper#getElementsInfo()`](http://docs.casperjs.org/en/latest/modules/casper.html#getelementsinfo)
174 - Added [`Casper#waitForUrl()`](http://docs.casperjs.org/en/latest/modules/casper.html#waitforurl)
175 - Added support for key modifiers to `Casper#sendKeys()`
176 - `cli`: Now dropping an arg or an option will be reflected in their *raw* equivalent
177 - `cli.get()` now supports fallback values
178
179 2013-02-08, v1.0.2
180 ------------------
181
182 - fixed [#431](https://github.com/n1k0/casperjs/pull/431) - fix for visible/waitUntilVisible when selector matches multiple elements
183 - fixed [#370](https://github.com/n1k0/casperjs/pull/370) - mergeObjects failed to deep-clone when the target object did not contain the corresponding key
184 - fixed [#375](https://github.com/n1k0/casperjs/pull/375) - Fixes a bug with getting form values for radio inputs, and introduces a minor optimization to avoid processing the same form fields more than once.
185 - closed [#373](https://github.com/n1k0/casperjs/issues/373) - added RegExp support to `Casper.waitForText()`
186 - fixed [#368](https://github.com/n1k0/casperjs/issues/368) - Remote JS error is thrown when a click target is missing after `click()`
187 - merged PR [#357](https://github.com/n1k0/casperjs/pull/357) - fire the `input` event after setting input value (required to support [angular.js](http://angularjs.org/) apps)
188
189 2013-01-17, v1.0.1
190 ------------------
191
192 - fixed [#336](https://github.com/n1k0/casperjs/issues/336) - Test result duration may have an exotic value
193 - Added `casper.mouse.doubleclick()`
194 - fixed [#343](https://github.com/n1k0/casperjs/issues/343) - Better script checks
195 - fixed an edge case with xunit export when `phantom.casperScript` may be not defined
196
197 2012-12-24, v1.0.0
198 ------------------
199
200 ### Important Changes & Caveats
201
202 - PhantomJS 1.6.x support has been dropped. Both PhantomJS [1.7](http://phantomjs.org/release-1.7.html) & [1.8](http://phantomjs.org/release-1.8.html) will be supported.
203 - the deprecated `injector` module has been removed from the codebase (RIP dude)
204 - a [`1.0` maintenance branch](https://github.com/n1k0/casperjs/tree/1.0) has been created
205 - CasperJS 1.1 development is now taking place on the `master` branch
206
207 ### Bugfixes & enhancements
208
209 - fixed `page.initialized` event didn't get the initialized `WebPage` instance
210 - fixed a bug preventing `Casper.options.onPageInitialized()` from being called
211 - fixed [#215](https://github.com/n1k0/casperjs/issues/215) - fixed broken `--fail-fast` option creating an endless loop on error
212 - fixed `Tester.renderFailureDetails()` which couldn't print failure details correctly in certain circumstances
213 - fixed `Casper.getHTML()` wasn't retrieving active frame contents when using `Casper.withFrame()`
214 - fixed [#327](https://github.com/n1k0/casperjs/issues/327) - event handler for `page.confirm` always returns true
215 - merged PR [#322](https://github.com/n1k0/casperjs/pull/322) - Support number in `Casper.withFrame()`
216 - fixed [#323](https://github.com/n1k0/casperjs/issues/323) - `thenEvaluate()` should be updated to take the same parameters as `evaluate()`, while maintaining backwards compatibility.
217 - merged PR [#319](https://github.com/n1k0/casperjs/pull/319), fixed [#209](https://github.com/n1k0/casperjs/issues/209) - test duration has been added to XUnit XML result file.
218 - `Casper.userAgent()` does not require the instance to be started anymore
219 - dubious tests now have dedicated color & styling
220 - added hint printing when a possible `casperjs` command call is detected
221
222 2012-12-14, v1.0.0-RC6
223 ----------------------
224
225 I'm still expecting a 1.0 stable for Christmas. Feedback: bring it on.
226
227 ### Important Changes & Caveats
228
229 #### Added experimental support for frames
230
231 A minimal convenient API has been added to Casper in order to ease the switch of current page context:
232
233 ```js
234 casper.start('tests/site/frames.html', function() {
235 this.test.assertTitle('CasperJS frameset');
236 });
237
238 casper.withFrame('frame1', function() {
239 this.test.assertTitle('CasperJS frame 1');
240 });
241
242 casper.then(function() {
243 this.test.assertTitle('CasperJS frameset');
244 });
245 ```
246
247 #### Reverted to emulated mouse events
248
249 Native mouse events didn't play well with (i)frames, because the computed element coordinates of the clicked element were erroneous.
250
251 So programmatic mouse events are reintroduced back into this corrective RC until a better solution is found.
252
253 ### Bugfixes & enhancements
254
255 - merged [#269](https://github.com/n1k0/casperjs/issues/269) - Windows Batch script: fixed unsupported spaces in path and argument splitting
256
257 2012-12-10, v1.0.0-RC5
258 ----------------------
259
260 I told you there won't be an 1.0.0-RC5? I lied. Expect 1.0 stable for Christmas, probably.
261
262 ### Important Changes & Caveats
263
264 #### Casper.evaluate() signature compatibility with PhantomJS
265
266 `Casper.evaluate()` method signature is now compatible with PhantomJS' one, so you can now write:
267
268 ```js
269 casper.evaluate(function(a, b) {
270 return a === "foo" && b === "bar";
271 }, "foo", "bar"); // true
272 ```
273
274 The old way to pass arguments has been kept backward compatible in order not to break your existing scripts though:
275
276 ```js
277 casper.evaluate(function(a, b) {
278 return a === "foo" && b === "bar";
279 }, {a: "foo", b: "bar"}); // true
280 ```
281
282 #### Specification of planned tests
283
284 In order to check that every planned test has actuall been executed, a new optional `planned` parameter has been added to `Tester.done()`:
285
286 ```js
287 casper.test.assert(true);
288 casper.test.assert(true);
289 casper.test.assert(true);
290 casper.test.done(4);
291 ```
292
293 Will trigger a failure:
294
295 ```
296 fail: 4 tests planned, 3 tests executed.
297 ```
298
299 That's especially useful in case a given test script is abruptly interrupted leaving you with no obvious way to know it and an erroneous success status.
300
301 The whole [CapserJS test suite](https://github.com/n1k0/casperjs/tree/master/tests/) has been migrated to use this new feature.
302
303 #### Experimental support for popups
304
305 PhantomJS 1.7 ships with support for new opened pages — aka popups. CasperJS can now wait for a popup to be opened and loaded to react accordingly using the new [`Casper.waitForPopup()`](http://casperjs.org/api.html#casper.waitForPopup) and [`Casper.withPopup()`](http://casperjs.org/api.html#casper.withPopup) methods:
306
307 ```js
308 casper.start('http://foo.bar/').then(function() {
309 this.test.assertTitle('Main page title');
310 this.clickLabel('Open me a popup');
311 });
312
313 // this will wait for the popup to be opened and loaded
314 casper.waitForPopup(/popup\.html$/, function() {
315 this.test.assertEquals(this.popups.length, 1);
316 });
317
318 // this will set the popup DOM as the main active one only for time the
319 // step closure being executed
320 casper.withPopup(/popup\.html$/, function() {
321 this.test.assertTitle('Popup title');
322 });
323
324 // next step will automatically revert the current page to the initial one
325 casper.then(function() {
326 this.test.assertTitle('Main page title');
327 });
328 ```
329
330 #### `Casper.mouseEvent()` now uses native events for most operations
331
332 Native mouse events from PhantomJS bring a far more accurate behavior.
333
334 Also, `Casper.mouseEvent()` will now directly trigger an error on failure instead of just logging an `error` event.
335
336 ### Bugfixes & enhancements
337
338 - fixed [#308](https://github.com/n1k0/casperjs/issues/308) & [#309](https://github.com/n1k0/casperjs/issues/309) - proper module error backtraces
339 - fixed [#306](https://github.com/n1k0/casperjs/issues/306) - Raise an explicit error on invalid test path
340 - fixed [#300](https://github.com/n1k0/casperjs/issues/300) - Ensure that `findOne()` and `findAll()` observe the scope for XPath expressions, not just when passed CSS selectors
341 - fixed [#294](https://github.com/n1k0/casperjs/issues/294) - Automatically fail test on any runtime error or timeout
342 - fixed [#281](https://github.com/n1k0/casperjs/issues/281) - `Casper.evaluate()` should take an array as context not object
343 - fixed [#266](https://github.com/n1k0/casperjs/issues/266) - Fix `tester` module and its self tests
344 - fixed [#268](https://github.com/n1k0/casperjs/issues/266) - Wrong message on step timeout
345 - fixed [#215](https://github.com/n1k0/casperjs/issues/215) - added a `--fail-fast` option to the `casper test` command, in order to terminate a test suite execution as soon as any failure is encountered
346 - fixed [#274](https://github.com/n1k0/casperjs/issues/274) - some headers couldn't be set
347 - fixed [#277](https://github.com/n1k0/casperjs/issues/277) - multiline support in `ClientUtils.echo()`
348 - fixed [#282](https://github.com/n1k0/casperjs/issues/282) - added support for remote client scripts loading with a new `remoteScripts` casper option
349 - fixed [#290](https://github.com/n1k0/casperjs/issues/#290) - add a simplistic RPM spec file to make it easier to (un)install casperjs
350 - fixed [`utils.betterTypeOf()`](http://casperjs.org/api.html#casper.betterTypeOf) to properly handle `undefined` and `null` values
351 - fixed `Casper.die()` and `Casper.evaluateOrDie()` were not printing the error onto the console
352 - added JSON support to `require()`
353 - added [`Tester.assertTruthy()`](http://casperjs.org/api.html#tester.assertTruthy) and [`Tester.assertFalsy()`](http://casperjs.org/api.html#tester.assertFalsy)
354 - added [`Casper.sendKeys()`](http://casperjs.org/api.html#casper.sendKeys) to send native keyboard events to the element matching a given selector
355 - added [`Casper.getFormValues()`](http://casperjs.org/api.html#casper.getFormValues) to check for the field values of a given form
356 - added [`Tester.assertTextDoesntExist()`](http://casperjs.org/api.html#tester.assertTextDoesntExist)
357 - added `Tester.assertFalse()` as an alias of `Tester.assertNot()`
358 - added `page.resource.requested` and `page.resource.received` events
359 - added [`translate.js`](https://github.com/n1k0/casperjs/tree/master/samples/translate.js) and [`translate.coffee`](https://github.com/n1k0/casperjs/tree/master/samples/translate.coffee) samples
360
361 2012-10-31, v1.0.0-RC4
362 ----------------------
363
364 Next version should be 1.0.0 stable.
365
366 - fixed [#261](https://github.com/n1k0/casperjs/issues/261) - Impossible to require CoffeeScript modules
367 - fixed [#262](https://github.com/n1k0/casperjs/issues/262) - Injecting clientScripts is not working
368 - fixed [#259](https://github.com/n1k0/casperjs/issues/259) - enhanced `Tester.assertField()` method, which can now tests for other field types than `input`s.
369 - fixed `Casper.getCurrentUrl()` could misbehave with encoded urls
370 - added [`Casper.echo()`](http://casperjs.org/api.html#clientutils.echo) to print a message to the casper console from the remote DOM environment
371 - added [`Casper.waitForText()`](http://casperjs.org/api.html#casper.waitForText) to wait for a given text to be present in page HTML contents
372 - added [`ClientUtils.getFieldValue()`](http://casperjs.org/api.html#clientutils.getFieldValue)
373 - Local CoffeeScript version has been upgraded to 1.4.0
374
375 2012-10-23, v1.0.0-RC3
376 ----------------------
377
378 ### Important Changes & Caveats
379
380 - the `injector` module is now deprecated, but kept for backward compatibility purpose.
381 - **BC BREAK**: fixes [#220](https://github.com/n1k0/casperjs/issues/220), [#237](https://github.com/n1k0/casperjs/issues/237) - added a `waitTimeout` options, removed `defaultWaitTimeout` option.
382 - **BC BREAK** (for the better): fixes [#249](https://github.com/n1k0/casperjs/issues/249) - default timeout functions don't `die()` anymore in tests
383 - **BC BREAK** (for the better): merged [#188](https://github.com/n1k0/casperjs/issues/188) - Easy access to current response object;
384 You can now access the current response object as the first parameter of step callbacks:
385
386 ```javascript
387 require('casper').create().start('http://www.google.fr/', function(response) {
388 require('utils').dump(response);
389 }).run();
390 ```
391
392 That gives:
393
394 ```
395 $ casperjs dump-headers.js
396 {
397 "contentType": "text/html; charset=UTF-8",
398 "headers": [
399 {
400 "name": "Date",
401 "value": "Thu, 18 Oct 2012 08:17:29 GMT"
402 },
403 {
404 "name": "Expires",
405 "value": "-1"
406 },
407 // ... lots of other headers
408 ],
409 "id": 1,
410 "redirectURL": null,
411 "stage": "end",
412 "status": 200,
413 "statusText": "OK",
414 "time": "2012-10-18T08:17:37.068Z",
415 "url": "http://www.google.fr/"
416 }
417 ```
418
419 To fetch a particular header by its name:
420
421 ```javascript
422 require('casper').create().start('http://www.google.fr/', function(response) {
423 this.echo(response.headers.get('Date'));
424 }).run();
425 ```
426
427 That gives:
428
429 ```javascript
430 $ casperjs dump-single-header.js
431 Thu, 18 Oct 2012 08:26:34 GMT
432 ```
433
434 The documentation has been [updated accordingly](http://casperjs.org/api.html#casper.then.callbacks).
435
436 ### Bugfixes & enhancements
437
438 - merged [#234](https://github.com/n1k0/casperjs/issues/234) - New Windows Loader written in Batch. Python is no more a requirement for using CasperJS on Windows. New installation instructions are [available](http://casperjs.org/installation.html#windows).
439 - a new `onWaitTimeout` option has been added, to allow defining a default behavior when a `waitFor*` function times out.
440 - [Casper.resourceExists()](http://casperjs.org/api.html#casper.resourceExists) and related functions now checks for non HTTP-404 received responses.
441 - fixed [#167](https://github.com/n1k0/casperjs/issues/167) - fixed opening truncated/uncomplete root urls may give erroneous HTTP statuses
442 - closes [#205](https://github.com/n1k0/casperjs/issues/205) - [`debugHTML()`](http://casperjs.org/api.html#casper.debugHTML) can have a selector passed; added [`getHTML()`](http://casperjs.org/api.html#casper.getHTML)
443 - closes [#230](https://github.com/n1k0/casperjs/issues/230) - added [`ClientUtils.getElementsBound()`](http://casperjs.org/api.html#clientutils.getElementsBounds) and [`Casper.getElementsBound()`](http://casperjs.org/api.html#casper.getElementsBounds)
444 - fixed [#235](https://github.com/n1k0/casperjs/issues/235) - updated `Casper.evaluate()` to use phantomjs >= 1.6 native one. As a consequence, **the `injector` module is marked as deprecated**.
445 - fixed [#250](https://github.com/n1k0/casperjs/issues/250) - prevent self tests to be run using the standard `casper test` command
446 - fixed [#254](https://github.com/n1k0/casperjs/issues/254) - fix up one use of qsa, hit when filling forms with missing elements
447 - [fixed](https://github.com/n1k0/casperjs/commit/ef6c1828c7b64e1cf99b98e27600d0b63308cad3) edge case when current document url couldn't be properly decoded
448
449 2012-10-01, v1.0.0-RC2
450 ----------------------
451
452 ### Important Changes & Caveats
453
454 - **PhantomJS 1.6 is now the minimal requirement**, PhantomJS 1.7 is supported.
455 - CasperJS continues to ship with its own implementation of CommonJS' module pattern, due to the way it has to work to offer its own executable. While the implementations are nearly the same, **100% compatibility is not guaranteed**.
456
457 ### Bugfixes & enhancements
458
459 - fixed [#119](https://github.com/n1k0/casperjs/issues/119) - `Casper.currentHTTPStatus` now defaults to `null` when resource are loaded using the `file://` protocol
460 - fixed [#130](https://github.com/n1k0/casperjs/issues/130) - added a `--no-colors` option to the `casper test` command to skip output coloration
461 - fixed [#153](https://github.com/n1k0/casperjs/issues/153) - erroneous mouse event results when `event.preventDefault()` was used.
462 - fixed [#164](https://github.com/n1k0/casperjs/issues/164) - ability to force CLI parameters as strings (see [related documentation](http://casperjs.org/cli.html#raw)).
463 - fixed [#178](https://github.com/n1k0/casperjs/issues/178) - added `Casper.getPageContent()` to access raw page body contents on non-html received content-types.
464 - fixed [#180](https://github.com/n1k0/casperjs/issues/180) - CasperJS tests are now run against a local HTTP test server. A new `casper selftest` command has been added as well.
465 - fixed [#189](https://github.com/n1k0/casperjs/issue/189) - fixed invalid XML due to message colorization
466 - fixed [#197](https://github.com/n1k0/casperjs/pull/197) & [#240](https://github.com/n1k0/casperjs/pull/240/) - Added new tester methods:
467 * [`assertField`](http://casperjs.org/api.html#tester.assertField)
468 * [`assertSelectorHasText`](http://casperjs.org/api.html#tester.assertSelectorHasText)
469 * [`assertSelectorDoesntHaveText`](http://casperjs.org/api.html#tester.assertSelectorDoesntHaveText)
470 * [`assertVisible`](http://casperjs.org/api.html#tester.assertVisible)
471 * [`assertNotVisible`](http://casperjs.org/api.html#tester.assertNotVisible)
472 - fixed [#202](https://github.com/n1k0/casperjs/pull/202) - Fix test status timeouts when running multiple suites
473 - fixed [#204](https://github.com/n1k0/casperjs/pull/204) - Fix for when the url is changed via javascript
474 - fixed [#210](https://github.com/n1k0/casperjs/pull/210) - Changed `escape` to `encodeURIComponent` for downloading binaries via POST
475 - fixed [#216](https://github.com/n1k0/casperjs/pull/216) - Change clientutils to be able to set a global scope
476 - fixed [#219](https://github.com/n1k0/casperjs/issues/219) - ease chaining of `run()` calls ([more explanations](https://groups.google.com/forum/#!topic/casperjs/jdQ-CrgnUd8))
477 - fixed [#222](https://github.com/n1k0/casperjs/pull/222) & [#211](https://github.com/n1k0/casperjs/issues/211) - Change mouse event to include an X + Y value for click position
478 - fixed [#231](https://github.com/n1k0/casperjs/pull/231) - added `--pre` and `--post` options to the `casperjs test` command to load test files before and after the execution of testsuite
479 - fixed [#232](https://github.com/n1k0/casperjs/issues/232) - symlink resolution in the ruby version of the `casperjs` executable
480 - fixed [#236](https://github.com/n1k0/casperjs/issues/236) - fixed `Casper.exit` returned `this` after calling `phantom.exit()` which may caused PhantomJS to hang
481 - fixed [#252](https://github.com/n1k0/casperjs/issues/252) - better form.fill() error handling
482 - added [`ClientUtils.getDocumentHeight()`](http://casperjs.org/api.html#clientutils.getDocumentHeight)
483 - added [`toString()`](http://casperjs.org/api.html#casper.toString) and [`status()`](http://casperjs.org/api.html#casper.status) methods to `Casper` prototype.
484
485 2012-06-26, v1.0.0-RC1
486 ----------------------
487
488 ### PhantomJS 1.5 & 1.6
489
490 - fixed [#119](https://github.com/n1k0/casperjs/issues/119) - HTTP status wasn't properly caught
491 - fixed [#132](https://github.com/n1k0/casperjs/issues/132) - added ability to include js/coffee files using a dedicated option when using the [`casper test` command](http://casperjs.org/testing.html)
492 - fixed [#140](https://github.com/n1k0/casperjs/issues/140) - `casper test` now resolves local paths urls
493 - fixed [#148](https://github.com/n1k0/casperjs/issues/148) - [`utils.isWebPage()`](http://casperjs.org/api.html#utils.isWebPage) was broken
494 - fixed [#149](https://github.com/n1k0/casperjs/issues/149) - [`ClientUtils.fill()`](http://casperjs.org/api.html#casper.fill) was searching elements globally
495 - fixed [#154](https://github.com/n1k0/casperjs/issues/154) - firing the `change` event after a field value has been set
496 - fixed [#144](https://github.com/n1k0/casperjs/issues/144) - added a [`safeLogs` option](http://casperjs.org/api.html#casper.options) to blur password values in debug logs. **This option is set to `true` by default.**
497 - added [`Casper.userAgent()`](http://casperjs.org/api.html#casper.userAgent) to ease a more dynamic setting of user-agent string
498 - added [`Tester.assertTitleMatch()`](http://casperjs.org/api.html#tester.assertTitleMatch) method
499 - added [`utils.getPropertyPath()`](http://casperjs.org/api.html#utils.getPropertyPath)
500 - added [`Casper.captureBase64()`](http://casperjs.org/api.html#casper.captureBase64) for rendering screen captures as base64 strings - closes [#150](https://github.com/n1k0/casperjs/issues/150)
501 - added [`Casper.reload()`](http://casperjs.org/api.html#casper.reload)
502 - fixed failed test messages didn't expose the subject correctly
503 - switched to more standard `.textContent` property to get a node text; this allows a better compatibility of the clientutils bookmarklet with non-webkit browsers
504 - casper modules now all use [javascript strict mode](http://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/)
505
506 ### PhantomJS >= 1.6 supported features
507
508 - added support of custom headers sending in outgoing request - refs [#137](https://github.com/n1k0/casperjs/issues/137))
509 - added support for `prompt()` and `confirm()` - closes [#125](https://github.com/n1k0/casperjs/issues/125)
510 - fixed [#157](https://github.com/n1k0/casperjs/issues/157) - added support for PhantomJS 1.6 `WebPage#zoomFactor`
511 - added `url.changed` & `navigation.requested` events - refs [#151](https://github.com/n1k0/casperjs/issues/151)
512
513 2012-06-04, v0.6.10
514 -------------------
515
516 - fixed [#73](https://github.com/n1k0/casperjs/issues/73) - `Casper.download()` not working correctly with binaries
517 - fixed [#129](https://github.com/n1k0/casperjs/issues/129) - Can't put `//` comments in evaluate() function
518 - closed [#130](https://github.com/n1k0/casperjs/issues/130) - Added a `Dummy` [colorizer](http://casperjs.org/api.html#colorizer) class, in order to disable colors in console output
519 - fixed [#133](https://github.com/n1k0/casperjs/issues/133) - updated and fixed documentation about [extensibility](http://casperjs.org/extending.html)
520 - added `Casper.clickLabel()` for clicking on an element found by its `innerText` content
521
522 As a side note, the official website monolithic page has been split across several ones: http://casperjs.org/
523
524 2012-05-29, v0.6.9
525 ------------------
526
527 - **BC BREAK:** PhantomJS 1.5 is now the minimal PhantomJS version supported.
528 - fixed [#114](https://github.com/n1k0/casperjs/issues/114) - ensured client-side utils are injected before any `evaluate()` call
529 - merged [#89](https://github.com/n1k0/casperjs/pull/89) - Support for more mouse events (@nrabinowitz)
530 - [added a new `error` event, better error reporting](https://github.com/n1k0/casperjs/commit/2e6988ae821b3251e063d11ba28af59b0683852a)
531 - fixed [#117](https://github.com/n1k0/casperjs/issues/117) - `fill()` coulnd't `submit()` a form with a submit input named *submit*
532 - merged [#122](https://github.com/n1k0/casperjs/pull/122) - allow downloads to be triggered by more than just `GET` requests
533 - closed [#57](https://github.com/n1k0/casperjs/issues/57) - added context to emitted test events + complete assertion framework refactor
534 - fixed loaded resources array is now reset adequately [reference discussion](https://groups.google.com/forum/?hl=fr?fromgroups#!topic/casperjs/TCkNzrj1IoA)
535 - fixed incomplete error message logged when passed an erroneous selector (xpath and css)
536
537 2012-05-20, v0.6.8
538 ------------------
539
540 - added support for [XPath selectors](http://casperjs.org/#selectors)
541 - added `Tester.assertNotEquals()` ([@juliangruber](https://github.com/juliangruber))
542 - fixed [#109](https://github.com/n1k0/casperjs/issues/109) - CLI args containing `=` (equals sign) were not being parsed properly
543
544 2012-05-12, v0.6.7
545 ------------------
546
547 - fixes [#107](https://github.com/n1k0/casperjs/issues/107): client utils were possibly not yet being injected and available when calling `Capser.base64encode()` from some events
548 - merged [PR #96](https://github.com/n1k0/casperjs/pull/96): make python launcher use `os.execvp()` instead of `subprocess.Popen()` ([@jart](https://github.com/jart)):
549 > This patch fixes a bug where casperjs' python launcher process won't pass along kill
550 > signals to the phantomjs subprocess. This patch works by using an exec system call
551 > which causes the phantomjs subprocess to completely replace the casperjs parent
552 > process (while maintaining the same pid). This patch also has the added benefit of
553 > saving 10 megs or so of memory because the python process is discarded.
554 - fixes [#109](https://github.com/n1k0/casperjs/issues/109) - CLI args containing `=` (equals sign) were not parsed properly
555 - fixes [#100](https://github.com/n1k0/casperjs/issues/100) & [#110](https://github.com/n1k0/casperjs/issues/110) - *googlepagination* sample was broken
556 - merged #103 - added `Tester.assertNotEquals` method (@juliangruber)
557
558 2012-04-27, v0.6.6
559 ------------------
560
561 - **BC BREAK:**: moved the `page.initialized` event to where it should have always been, and is now using native phantomjs `onInitialized` event
562 - fixed [#95](https://github.com/n1k0/casperjs/issues/95) - `Tester.assertSelectorExists` was broken
563
564 2012-03-28, v0.6.5
565 ------------------
566
567 - **BC BREAK:** reverted 8347278 (refs [#34](https://github.com/n1k0/casperjs/issues/34) and added a new `clear()` method to *close* a page
568 You now have to call `casper.clear()` if you want to stop javascript execution within the remote DOM environment.
569 - **BC BREAK:** removed `fallbackToHref` option handling in `ClientUtils.click()` (refs [#63](https://github.com/n1k0/casperjs/issues/63))
570 - `tester.findTestFiles()` now returns results in predictable order
571 - added `--log-level` and `--direct` options to `casper test` command
572 - fixed 0.6.4 version number in `bootstrap.js`
573 - centralized version number to package.json
574 - ensured compatibility with PhantomJS 1.5
575
576 2012-02-09, v0.6.4
577 ------------------
578
579 - fixed `casperjs` command wasn't passing phantomjs native option in the correct order, resulting them not being taken into account by phantomjs engine:
580 - fixed [#49](https://github.com/n1k0/casperjs/issues/49) - `casperjs` is not sending `--ssl-ignore-errors`
581 - fixed [#50](https://github.com/n1k0/casperjs/issues/50) - Cookies not being set when passing `--cookies-file` option
582 - fixed Python3 compatibility of the `casperjs` executable
583
584 2012-02-05, v0.6.3
585 ------------------
586
587 - fixed [#48](https://github.com/n1k0/casperjs/issues/48) - XML Output file doesn't have classpath populated with file name
588 - refs [#46](https://github.com/n1k0/casperjs/issues/46) - added value details to Tester `fail` event
589 - new site design, new [domain](http://casperjs.org/), enhanced & updated docs
590
591 2012-01-19, v0.6.2
592 ------------------
593
594 - fixed [#41](https://github.com/n1k0/casperjs/issues/41) - injecting casperjs lib crashes `cmd.exe` on Windows 7
595 - fixed [#42](https://github.com/n1k0/casperjs/issues/42) - Use file name of test script as 'classname' in JUnit XML report (@mpeltonen)
596 - fixed [#43](https://github.com/n1k0/casperjs/issues/43) - Exit status not reported back to caller
597 - suppressed colorized output syntax for windows; was making output hard to read
598 - added patchy `fs.isWindows()` method
599 - added `--xunit=<filename>` cli option to `$ casperjs test` command for saving xunit results, eg.:
600
601 $ casperjs test tests/suites --xunit=build-result.xml
602
603
604 2012-01-16, v0.6.1
605 ------------------
606
607 - restablished js-emulated click simulation first, then native QtWebKit
608 events as a fallback; some real world testing have surprinsingly proven the former being often
609 more efficient than the latter
610 - fixed casperjs executable could not handle a `PHANTOMJS_EXECUTABLE` containing spaces
611 - fixed casper could not be used without the executable [as documented](http://casperjs.org/#faq-executable)
612 - fixed wrong `debug` log level on `ClientUtils.click()` error; set to `error`
613
614 Please check the [updated documentation](http://casperjs.org).
615
616 2012-01-12, v0.6.0
617 ------------------
618
619 - **BC BREAK:** `Casper.click()` now uses native Webkit mouse events instead of previous crazy utopic javascript emulation
620 - **BC BREAK:** All errors thrown by CasperJS core are of the new `CasperError` type
621 - **BC BREAK:** removed obsolete `replaceFunctionPlaceholders()`
622 - *Deprecated*: `Casper.extend()` method has been deprecated; use natural javascript extension mechanisms instead (see samples)
623 - added `$ casperjs test` command for running split test suites
624 - `Casper.open()` can now perform HTTP `GET`, `POST`, `PUT`, `DELETE` and `HEAD` operations
625 - commonjs/nodejs-like module exports implementation
626 - ported nodejs' `events` module to casperjs; lots of events added, plus some value filtering capabilities
627 - introduced the `mouse` module to handle native Webkit mouse events
628 - added support for `RegExp` input in `Casper.resourceExists()`
629 - added printing of source file path for any uncaught exception printed onto the console
630 - added an emulation of stack trace printing (but PhantomJS will have to upgrade its javascript engine for it to be fully working though)
631
632 Please check the [updated documentation](http://casperjs.org).
633
634 ---
635
636 2011-12-25, v0.4.2
637 ------------------
638
639 - merged PR #30 - Add request method and request data to the `base64encode()` method (@jasonlfunk)
640 - `casperjs` executable now gracefully exists on KeyboardInterrupt
641 - added `Casper.download()` method, for downloading any resource and save it onto the filesystem
642
643 ---
644
645 2011-12-21, v0.4.1
646 ------------------
647
648 - fixed #31 - replaced bash executable script by a Python one
649
650 ---
651
652 2011-12-20, v0.4.0
653 ------------------
654
655 - first numbered version
......