-
Notifications
You must be signed in to change notification settings - Fork 12
/
Changes
816 lines (723 loc) · 37.5 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
* Windows tests
* Tested against Chrome/62.0.3202.94
* Tested against Chrome/63.0.3239.132
* Tested against Chrome/64.0.3282.119
* Tested against Chrome/65.0.3325.181
* Tested against Chrome/66.0.3359.139
* Tested against Chrome/67.0.3396.99
* Tested against Chrome/68.0.3440.84
* Tested against Chrome/69.0.3497.100
* Tested against Chrome/70.0.3538.102
* Tested against Chrome/71.0.3578.98
* Tested against Chrome/72.0.3626.96
* Tested against Chrome/73.0.3683.103
* Tested against Chrome/74.0.3729.131
* Tested against Chrome/75.0.3770.90
* Tested against Chrome/76.0.3798.0
* Tested against Chrome/77.0.3865.75
* Tested against Chrome/78.0.3904.70
* Tested against Chrome/79.0.3945.117
* Tested against Chrome/80.0.3987.149
* Tested against Chrome/80.0.3987.163
* Tested against Chrome/81.0.4024.0
* Tested against Chrome/82.0.4052.0
* Tested against Chrome/83.0.4102.0
* Tested against Chrome/84.0.4112.0
* Tested against Chrome/86.0.4240.198
* Tested against Chrome/87.0.4280.66
* Linux tests
* Tested against Chromium Chromium/83.0.4103.116
* Tested against Chromium Chromium/65.0.3325.181
* Tested against Chromium Chromium/66.0.3359.139
* Tested against Chromium Chromium/67.0.3396.87
* Tested against Chromium Chromium/75.0.3770.100
* Tested against Chromium Chromium/77.0.3865.120
* Tested against Chromium Chromium/78.0.3904.108
* Tested against Chromium Chromium/80.0.3987.106
* Tested against Chromium Chromium/83.0.4103.97
* Tested against Chromium Chromium/85.0.4183.102
* Tested against Chromium Chromium/86.0.4240.198
* Tested against Chromium Chromium/87.0.4280.141
* Tested against Chromium Chromium/90.0.4430.212
* Tested against Chromium Chromium/91.0.4472.164
* Tested against Chromium Chromium/95.0.4638.54
* Tested against Chromium Chromium/111.0.5563.65
* Tested against Chromium Chromium/112.0.5615.121
0.73 2024-03-29
* Tests should not hang when run as root now
* Sandbox is automatically disabled when running as root
0.72 2023-11-21
* requires Perl 5.020 due to various features
* WWW::Mechanize::Chrome now emits events instead of having callbacks. This
allows multiple subscribers for an event.
* ->on_popup is now an event. To port replace
->on_popup with
->on( 'popup' => sub( $mech, $tab ) { ... })
* Chrome::DevToolsProtocol::Target::on_message now emits an event.
To port replace
->on_message with
->on( 'message' => sub( $mech, $m ) { ... })
* Added "app" option to make Chrome show up without address bar etc.
* More command line switches to disable Chrome update behaviour
0.71 2023-04-22
* Add example script showing how to attach to a running Chrome instance
* No code changes, no need to upgrade
0.70 2023-03-30
* Move tests from Test::More::isn::t to Test::More::isnt
* Remove usage of ->@* for compatibility with earlier versions of Perl
0.69 2023-03-27
* Add documentation on the profile directory / C<profile> constructor option
* Add --domain-reliability-option to disable one more Google ping
* some obsolete command line options removed
* Add --remote-allow-origins=* to fix working on Chrome 111 onwards
* Revamp fetching of node properties
* Redo node invalidation and retry searches - this could help when receiving NodeID=0
* Some memory usage improvements
KNOWN BUGS
* Some (closed over?) Futures are not awaited or cancelled properly but
are lost. Hints to where they are constructed are welcome.
0.68 2021-08-27
* The tab numbers now exclude loaded extension and background pages. This
means that you may (or may not) have to adjust the number for the "tab"
option in the constructor
* Pages with Unicode now properly get stored encoded and can be properly
retrieved using ->content() ( GH #63 )
0.67 2021-07-09
* Add json_log_file and json_log_fh options
This is in preparation of supporting Firefox as well and collecting
verbatim communications for debugging
* Really fix the ->highlight_nodes() method, thanks to Joshua Pollack
* Restore the ability to connect to an existing Chrome instance,
thanks to Joshua Pollack
* Added test for connecting to running Chrome instances
* Test resiliency improved
0.66 2021-03-28
* Move bugtracker to Github
* ->click() now always returns the HTTP response. In cases of internal
navigation, it used to erroneously return an arrayref
* Fix for GH #55 , ->decoded_content() does not work for HTML content
* Test stability fixes, adapt tests to Chrome 88
* Remove some hardcoded sleep() calls from the test harness
* Chrome DOM nodes can have a node id of 0 , but the Chrome API does not
gracefully handle these. We output "Bad luck" on encountering such
a node.
0.65 2020-11-30
* Fix missing use of Filter::signatures to allow running on Perl 5.18
0.64 2020-11-29
* Add ->on_popup() callback
* Add ->list_tabs() method
* Add various asynchronous implementations for methods
* Don't wait in ->close() anymore for the close to finish
* New tabs don't have a way to notice when they are fully loaded yet
* Fix rare error when a node with nodeId 0 could not be fetched
0.63 2020-11-28
* Fix ->new_tab() to actually work, add a unit test for it
* Fix cookie handling to preserve "immediately" expiring cookies for
one second so HTTP::Cookies does not immediately discard them. Add a
unit test for this new behaviour.
* The information TCP connection needed for TCP communication with
Chrome is now gleaned from the endpoint information as a fallback
(Thanks to Patrik)
* Test::HTTP::LocalServer 0.71 is now required as a minimum, since there
are some tests that require the new form value behaviour
* Chrome 62 doesn't handle setting cookies well, so skip the tests on
that too
0.62 2020-11-27
* Add ->new_tab() method to create a new tab in the current session
(suggested by Patrik)
0.61 2020-11-03
* ->content(format => 'text') and ->text() now properly skip the content
within <script> tags. Reported by "roho" on Perlmonks, many thanks!
* Custom headers now always get stringified before passing them to Chrome
* Test stability improvements for Windows
Chrome 64.0.3725 crashes on setting custom headers, so we skip testing that
0.60 2020-08-23
* Bump Filter::signatures prerequisite to 0.16
This is because we create too many strings so (some versions of)
Filter::Simple create placeholder strings that look like (in)valid
subroutine signatures. This prerequisite matches these placeholders
in a stricter way.
0.59 2020-08-21
* Add ->capturePageSnapshot for saving a complete page as MHTML
* ->content( format => 'mhtml' ) now returns the complete page as MHTML
0.58 2020-05-25
* Fixed handling of https "secure" cookies - these can now actually be
stored and sent
* Add ->getWindowForTarget()
* Add ->getBrowserContexts()
* We don't spawn a Chrome process if a premade transport is passed in
* The distinction between using the users cookies etc. or creating a
separate browsing session is made by using the new "separate_session"
constructor option
* When connecting to an existing Chrome session, we don't spawn a new
window anymore
* ->createTarget() now accepts additional options
0.57 2020-05-23
* ->set_fields() now does work for setting radio buttons when using the
index notation. Checking a radio button by its name and value alone
is currently not possible.
(Reported by a user, with test script)
* Setting a field value now defaults to sending the "focus" event before
and the "change" event after the value has been set. If you need to
restore the old behaviour, use
->field('foo', $value, 0, [], [] )
0.56 2020-05-21
* Fix ->autoclose_tab / autoclose option so that they actually leave
Chrome open when the Perl program stops
* Wait a little bit longer so the Chrome child actually goes away
0.55 2020-05-14
* Don't reuse internal functions of WWW::Mechanize
In this case, _match_any_link_parm() had been renamed to
_match_any_link_param(). The code has been copied now instead of being
reused.
* Pass link filtering logic for ->saveResources_future() around properly.
This could maybe fix the top page of a tree not being saved.
Also, parts of the filtering logic were the wrong way around.
* The filenames in ->saveResources_future() are now generated only from the
path of the URL, not the query parameters
0.54 2020-05-13
* Make ->saveResources_future() respect the target_dir directory for
saved resources
* Make the saved resources in ->saveResources_future configurable
through a callback
* ->saveResources_future() now returns a reference, like its documentation
states
* Add more tests for ->saveResources_future()
0.53 2020-05-10
* Add a timeout on Chrome shutdown for OSX.
This seems to be needed at least for Travis CI, where
kill SIGKILL, $pid; waitpid($pid,0)
hangs indefinitely. Now we give Chrome up to 2 seconds to shut down on
OSX and then continue.
0.52 2020-05-08
* Strip leading and trailing whitespace, normalize whitespace
in link texts as returned by ->links()
0.51 2020-05-01
* Add ->select() method
* ->current_form() is now cleared between page changes
* $node->set_attribute() now always stringifies its argument
0.50 2020-05-01
* Add ->tick() and ->untick() methods
* Fix crash in ->reload( ignoreCache => 1 ), GH issue #54
0.49 2020-04-30
* Fix sending events after changing an element value
This makes
$mech->field( foo => 'bar', undef, undef, ['change'] );
actually send the onchange event
0.48 2020-04-19
* API CHANGES:
* ->field() now takes the form field index as third parameter, like
WWW::Mechanize does. It warns about the old usage and corrects it for
the time being.
Change ->field( name => 'John Bull', [], [] ) to
->field( name => 'John Bull', undef, [], [] )
for operating as it did before and silencing the warning.
* ->field() now checks its parameter count and wants a field name and a
value to set the field to. Use ->value() to query the value of a field
without setting it. This change to your scripts is mandatory because
->field() now uses a parameter declaration.
* ->value() now takes the index as its second parameter, instead of
taking a new value as its second parameter. The old form was deprecated
a long time ago.
* ->set_fields() now can set the value of fields with the same name
->set_fields( foo => ['new_value', 2] ) now works.
* Stability fixes/warning elimination in ->handle_dialog() and
->_handle_screencast_frame()
The methods used their hand-rolled handling of "fire-and-forget" Futures
instead of using Future->retain()
* Temporarily add Data::Dump as test prerequisite. This seems to be an
action that will prevent test failures on Travis:
https://rt.cpan.org/Public/Bug/Display.html?id=132378
0.47 2020-04-08
* Add ->transport() accessor to WWW::Mechanize::Chrome
This currently just is ->driver->transport
* Deprecate ->driver()
You should use ->transport or ->target, depending on who you really
want to talk to (GH issue #52)
* Properly pass on events that get send before a click is generated and
after that event. This allows automatically generating focus events
when setting the value of an input field (GH issue #53).
0.46 2020-03-29
* Actually make transferring the cookies from/to Chrome work
* Add W:M:C:URLBlacklist to ease restricting what Chrome loads
* Document the `headless` option to run Chrome without showing a window
This option had been available a long time, but it only ever was
mentioned in passing.
0.45 2020-03-28
* The "secure" cookie attribute now gets forced into a JSON boolean
in ->set_cookie. Thanks to Rub3nCT for reporting this in GH issue #53.
* Added ->load_jar method to import a complete HTTP::Cookies cookie jar
into Chrome, suggested by Rub3nCT in GH issue #53.
0.44 2020-01-03
* Fix ->get_attribute('innerHTML') and ->get_attribute('outerHTML')
being broken in 0.42. Also add a test for that functionality. GH #48.
* Test suite stability
0.43 2019-12-26
* Fix number of tests skipped on test skipping
* Fix (and add a test for) ->text() method. This addresses RT #130999,
test provided by Chris Denley.
0.42 2019-12-23
* ->find_link() now uses the text() attribute, not the innerHTML. This means
that for example text_regex searches can't match HTML in link texts anymore.
* ->xpath (and all other querying functions) now properly filter on the
relevant subtree. This might change the results you get from the queries
as now elements are properly filtered. Fixes GH issue #48.
* Split longest wallclock time test into two tests, now running the
parallel test suite in 15s per browser per backend, from 20s.
* Silence the log output even in TRACE level. sendMessageToTarget and the
immediate Target.receivedMessageFromTarget replies to it will not show
up in the output anymore. If you need it, please speak up so I can make
the list of (un)suppressed messages configurable.
0.41 2019-12-22
* Actually respect the default backend class. This should mean we can
actually use a backend class. This closes GH issue #45
* Github Actions infrastructure improvements
* On MacOS, "Google Chrome.app" is now searched only in existing directories
* On MacOS, we also find Chromium now if Google Chrome is not installed
* Clarified documentation for ->click() based on feedback from Perlmonks.org
* Fixed incomplete documentation. This addresses GH issue #47
0.40 2019-11-15
* Keep any preset value in @Chrome::DevToolsProtocol::Transport::loops
* Keep any preset value in @Chrome::DevToolsProtocol::Transport::Pipe::loops
* Make the test suite leaner by only launching test servers if we're
actually going to run tests
* Fix a crash with the Mojo backend when Chrome crashed/was unavailable
* ->get_text() and ->get_attribute('innerText') used to return HTML. Now
they return the actual text content of nodes, using the Javascript
attribute 'textContent' or 'innerText' respectively. This changes the
behaviour as now for example the content of a TEXTAREA tag cannot be
fetched with ->get_text() anymore. Use ->get_attribute('value') for that.
* Attributes set on a node now can be re-fetched from the live instance
of the node. Use ->get_attribute('attribute_name', 1) to force a live
query to Chrome.
* The ->links() method now also finds A tags without an href= attribute
and returns these.
0.39 2019-11-08
* Skip tests on unsupported Chrome versions
* Switch default (prerequisite) backend to IO::Async
* We now have a dynamic configuration again, because on Windows we need
Win32::File::VersionInfo to determine the Chrome version without
launching it.
0.38 2019-11-01
* Added wait_file option to wait for a file to disappear so we know that
this Chrome instance has quit.
* Added ->close() method to disconnect the object. This is just parts of
DESTROY().
* The backend selection was improved. We now select the backend that is
already loaded.
* Some memory leaks/circular references eliminated
0.37 2019-09-30
* WWW::Mechanize::Chrome now asks Chrome for the URL. This allows the test
suite (and your programs) to run in parallel, each using their own
Chrome instance without them treading onto each others toes.
* WWW::Mechanize::Chrome can now talk to Chrome v72+ using pipes (fd 3 and
fd 4) on unixish OSes. In theory, using fd 3 and fd 4 is possible on
Windows as well but not yet implemented. Doing this allows you to
avoid sockets in the local communication.
Use
pipe => 1
in the constructor to switch to using pipes.
* API change: Use ->getTargets->get() instead of ->list_tabs()
->list_tabs() will be unsupported in the future.
* The following three Chrome versions are now unsupported, as they do
not allow reading the websocket URL from Chrome:
* Chrome/59.0.3071.115
* HeadlessChrome/60.0.3110.0
* HeadlessChrome/61.0.3141.0
If you really, really need them, please contact me so that I know that
I need to keep the old connection code around.
0.36 2019-09-27
* Added cleanup_signal option to select the signal which is used for
cleaning up Chrome instances. This is SIGKILL on Windows and SIGTERM
everywhere else by default. Proposed and prototyped by Chris Novakovic.
* First parts of talking to Chromium via IPC pipes instead of sockets
The real change will come in the next versions, but you can enable
using a pipe for communication already by using the
pipe => 1
option.
* More lenient timeouts
* Fix retrieving the Chrome version
There was a spurious call to ->log() when we didn't have a logger. This
resulted in empty Chrome versions.
0.35 2019-09-05
* Documented `intrapage` option to ->click()
* Added `chromium` to default list of browsers
0.34 2019-06-15
* Add ->remove_listener to $mech to explicitly remove event listeners.
The usual way is RAII-style, letting your event listener simply go out of
scope. This is for times where you can't let your event listener go out
of scope.
* Be more defensive to avoid (unweak) circular references. This should clean
out more memory leaks whenever a callback is set or a Future is returned
from W:M:C.
* Fix (partial code for) saving a page. I don't know how this test ever
passed. This adresses RT #129821.
0.33 2019-05-29
* Actually call waitpid to make sure our Chrome processes go away properly
and to not accumulate zombies. Sent by Felipe Sologuren. This fixes
RT #129805, thanks!
* Fix memory leak caused by non-weakening of references in ->add_listener
Diagnosed and reported by Felipe Sologuren. This fixes RT #129808,
thanks!
* Add ->event accessor to Chrome::DevToolsProtocol::EventListener, suggested
by Felipe Sologuren, thanks!
0.32 2019-05-29
* ->update_html now stringifies its argument. This allows to pass in objects
with stringification overload instead of having to do the stringification
yourself. Addresses GH #42.
* Rename HTTP::Cookies::Chrome to HTTP::Cookies::ChromeDevTools to avoid
the name clash.
0.31 2019-05-25
* Silence HTTP::Cookies::Chrome debug output left over
* ->eval() now takes options on whether object references or JSON-serialized
data should be returned. This allows you to reference the "window"
object, for example.
Currently, these object references are kept as hashrefs instead of
objects, and the handling needs to become more transparent with respect to
the Chrome API, but that is planned for later versions.
0.30 2019-05-17
* Disable the Host: header test for Chromer 76+, as this raises an error
in those versions instead of just not working.
I guess this is progress.
0.29 2019-04-23
* Add ->cookie_jar support, this adresses GH #40
* Document "autoclose" option
0.28 2019-01-07
* More test resiliency against fake domains / links injected by bad ISPs
(like frontier.com )
* Link to WWW::Mechanize::Chrome::Troubleshooting from main documentation
* Documentation improvements by SDONLEY
* Up Future prerequisite to 0.35, earlier versions lack the features
the module uses
0.27 2018-12-23
* Properly handle Page.navigatedWithinDocument instead of raising an error.
The synthetic response object doesn't help much, but on the other side,
it's much better than raising an error and stopping the script.
Reported by Steve Dondley, Github issue GH #34
0.26 2018-12-09
* Actually do something if we timeout when connecting to Chrome.
The main cause of the connetcion to Chrome failing is that there already
is a non-devtools instance of Chrome running and is brought to the
foreground instead of a new DevTools-enabled instance being launched.
The best workaround is to launch it as
use File::Temp 'tempdir';
# create a fresh Chrome every time
my $mech = WWW::Mechanize::Chrome->new(
data_directory => tempdir(CLEANUP => 1 ),
);
* More log output in Chrome::DevToolsProtocol
* Now testing up to Chrome 73
* ExtUtils::MakeMaker minimum version 5.52_01, contributed by LorenzoTa
* Fix the test skip counts for several tests
0.25 2018-11-23
* Added one stray test to the distribution
* Rework of the documentation, thanks to Harald Joerg
This is a result of the PRC, thank you very much!
* No code changes, no need to upgrade
0.24 2018-11-19
* Fix for ->setRequestInterception_future
and ->setRequestInterception, contributed by Enrique Pessoa
This addresses RT #127738
0.23 2018-10-20
* Spun off screencast client into Mojolicious::Plugin::PNGCast distribution
* Documentation fixes (thanks Hacktoberfest!)
* --enable-automation is now on by default
* Document PDF paper size options (Thanks Eugen Konkov)
* Slight logging improvements for the Net::Async backend
0.22 2018-09-23
. Logging improvements
. Documentation of the DevToolsProtocol class
. Convenience parameter to ->click() to click on text
. Developer tests now spawn a single Chrome test, speeding up the test run
0.21 2018-09-15
. Fix ->sendkeys() to actually work
. Fix crash in ->wait_until_visible()
. Fix ->block_urls() to actually work
. Make log output less verbose, log more information in onelines
. "extra_headers" constructor argument works as documented
. Added a (Mojolicious) receiver for screencasts to better observe
what a headless Chrome is currently doing
. Added a very experimental start of WWW::Mechanize::Edge for
Microsoft Edge, which happens to use the same protocol as Chrome. This
is largely undocumented.
0.20 2018-09-07
. Add better diagnostics when the Chrome binary is not found
. Better search logic for Chrome binary, also support chromium-browser
. ->sendkeys() method to type input into browser
. ->content_as_pdf() now can also save to a file (as documented)
. Docfix for screencast data
0.19 2018-08-25
. Make ->set_attribute() actually work
. Recognize more intra-page navigation events
. Tested against Chrome/59.0.3071.115
. Tested against HeadlessChrome/60.0.3110.0
. Tested against HeadlessChrome/61.0.3141.0
. Tested against HeadlessChrome/62.0.3202.94
. Tested against HeadlessChrome/63.0.3239.132
. Tested against HeadlessChrome/64.0.3282.119
. Tested against HeadlessChrome/65.0.3325.181
. Tested against HeadlessChrome/66.0.3359.139
. Tested against HeadlessChrome/67.0.3396.99
. Tested against HeadlessChrome/68.0.3435.0
. Tested against HeadlessChrome/68.0.3440.84
. Tested against HeadlessChrome/69.0.3496.0
. Tested against HeadlessChrome/70.0.3500.0
. Tested against HeadlessChrome/70.0.3509.0
. Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
. Tested against Google Chrome 67.0.3396.99 Built on OSX, thanks Travis CI
. Tested against Chrome/67.0.3396.99 / Win64, thanks AppVeyor
0.18 2018-08-03
. Properly handling moving between fragments, for example
from http://example.com/#1 to http://example.com#2
(reported via Perlmonks.org)
This kind of navigation does not work on Chrome 64 and Chrome 59.
. Disable the "save password" bubble by default.
You can re-enable this by passing a true value to the option
save_password_bubble in the constructor.
. Tested against Chrome/59.0.3071.115
. Tested against HeadlessChrome/60.0.3110.0
. Tested against HeadlessChrome/61.0.3141.0
. Tested against HeadlessChrome/62.0.3202.94
. Tested against HeadlessChrome/63.0.3239.132
. Tested against HeadlessChrome/64.0.3282.119
. Tested against HeadlessChrome/65.0.3325.181
. Tested against HeadlessChrome/66.0.3359.139
. Tested against HeadlessChrome/67.0.3396.99
. Tested against HeadlessChrome/68.0.3435.0
. Tested against HeadlessChrome/68.0.3440.84
. Tested against HeadlessChrome/69.0.3496.0
. Tested against HeadlessChrome/70.0.3500.0
. Tested against HeadlessChrome/70.0.3509.0
. Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
. Tested against Google Chrome 67.0.3396.99 Built on OSX, thanks Travis CI
. Tested against Chrome/67.0.3396.99 / Win64, thanks AppVeyor
0.17 2018-07-07
. Added installation instructions for MacOS / OSX, contributed by Sdonley
. Added default path on MacOS for using the default Chrome executable
. Automatic testing for OSX on Travis CI is now enabled
. We now always launch Chrome / Chromium with --no-zygote and --no-sandbox
This behaviour can be disabled by passing
no_zygote => 0,
no_sandbox => 0,
to the constructor
. Skip constructor failure tests for Perl < 5.014
$@ is not always preserved when a destructor calls eval{} on those
versions of Perl.
. Add ->infinite_scroll as experimental API, together with ->scroll_to_bottom
Added by sdondley
. Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
. Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
. Tested against Chromium 63.0.3239.132 / Win64
. Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
. Tested against Chromium 66.0.3359.139 / Win64 (some tests skipped)
. Tested against Chromium 67.0.3396.99 / Win64 (some tests skipped)
. Tested against Chromium 68.0.3435.0 / Win64 (some tests skipped)
. Tested against Chromium 69.0.3481.0 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
. Tested against Google Chrome 67.0.3396.99 Built on OSX, thanks Travis CI
. Tested against Chrome/67.0.3396.99 / Win64, thanks AppVeyor
0.16 2018-06-23
+ Added ->is_visible, ->wait_until_visible and ->wait_until_invisible
+ Better way to find the system browser by default
This can be overridden by explicitly specifying the executable to use
. Rename ->agent_async() to ->agent_future()
. Add ->callFunctionOn_future() and ->callFunctionOn()
! "start_url" now actually gets you the first URL
! Fixed ->viewport_size() to actually work
. Experimental prototype of self-implemented Save Page As feature
(undocumented)
0.15 2018-05-30
. Added ->links() method, pasted from WWW::Mechanize::PhantomJS
Thanks to Alain Rioux for spotting
+ Add some more command line switches to disable more background behaviour
of Chrome by default:
background_networking
client_side_phishing_detection
component_update
hang_monitor
prompt_on_repost
sync
web_resources
default_apps
infobars
default_apps
popup_blocking
You can re-enable this by passing a true value to the option in
the constructor
0.14 2018-05-27
+ The "tab" parameter to ->new() was documented
! The "reuse" parameter to reconnect to an existing Chrome instance is
not needed anymore if you pass in a true value for the "tab" parameter.
! Downloads are now detected in a better way on Chrome 66+
This needed some general rework in how responses are treated, so please
retest your scripts and send me failing tests if a case has now become
time-critical.
. Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
. Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
. Tested against Chromium 63.0.3239.132 / Win64
. Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
. Tested against Chromium 66.0.3359.139 / Win64 (some tests skipped)
. Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
. Tested against Chromium 68.0.3417.0 / Win64 (some tests skipped)
. Tested against Chromium 69.0.3443.0 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
0.13 2018-04-24
. More test stability
. Actually exit() after a failed fork() call
This fixes RT 125162, diagnosed by Slaven Rezic
. Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
. Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
. Tested against Chromium 63.0.3239.132 / Win64
. Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
. Tested against Chromium 66.0.3346.0 / Win64 (some tests skipped)
. Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
0.12 2018-04-21
. Fix erroneous use of IO::Async::Loop in the tests
This fixes RT 125156, diagnosed by Slaven Rezic
. Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
. Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
. Tested against Chromium 63.0.3239.132 / Win64
. Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
. Tested against Chromium 66.0.3346.0 / Win64 (some tests skipped)
. Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
0.11 2018-04-14
+ Support ->reload on Chrome v66+ by adding --disable-prompt-on-repost
This globally disables the prompting on repost for the process. If you
need to test for these prompts, add
disable_prompt_on_repost => 0
to the options for the WWW::Mechanize::Chrome object. To my knowledge,
there is no way to programmatically find whether Chrome is prompting for
a repost or not. See also
https://bugs.chromium.org/p/chromium/issues/detail?id=804371
+ Support ->getRequestPostData() to retrieve the data when sending a POST
request
+ Support ->searchInResponseBody() to search in a response body without
retrieving the body to Perl space. This doesn't work reliably in my
experience, as Chrome seems to forget response bodies rather quickly.
+ outerHTML is now a gettable property
+ The User-Agent string can be set in the constructor
+ Fixes for Chrome v67 when retrieving file:// resources
These fixes might have unwanted side-effects for other versions of Chrome
and other protocols, but the test suite doesn't show any of them. If this
change breaks your workflow, please submit a (failing) test case.
. Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
. Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
. Tested against Chromium 63.0.3239.132 / Win64
. Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 / Win64 (some tests skipped)
. Tested against Chromium 66.0.3346.0 / Win64 (some tests skipped)
. Tested against Chromium 67.0.3394.0 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3325.181 Built on Ubuntu, thanks Travis CI
0.10 2018-02-02
+ IO::Async / Net::Async support
This was mostly held back by me not understanding the API of
Net::Async::WebSocket::Protocol. This needs
Net::Async::WebSocket::Client 0.12 (or higher) installed.
+ Workarounds in tests for new, incompatible Chrome behaviour
. Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
. Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
. Tested against Chromium 63.0.3239.132 / Win64
. Tested against Chromium 64.0.3282.119 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3317.0 / Win64 (some tests skipped)
. Tested against Chromium 66.0.3335.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 Built on Ubuntu, thanks Travis CI
0.09 2018-01-04
! ->js_errors() now only returns error messages
! ->js_console_entries returns all entries in the browser console
! Errors in JS code from ->eval_in_page are now fatal errors in Perl too
+ The ->reload() method works now
. Tested against Chromium 59.0.3071.115 / Win64 (some tests skipped)
. Tested against Chromium 60.0.3110.0 / Win64 (some tests skipped)
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64 (some tests skipped)
. Tested against Chromium 63.0.3239.108 / Win64
. Tested against Chromium 64.0.3282.0 / Win64 (some tests skipped)
. Tested against Chromium 65.0.3311.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 Built on Ubuntu, thanks Travis CI
0.08 2017-11-30
+ Implemented file downloads and their storage for v62 and v63
You can't find out the name a file was saved as, and you can't find out
when the download is done.
Chrome v64 doesn't notify us at all about downloads.
! Redid success/failure logic of responses
We try harder to associate a response with something that we actually
initiated.
! Selecting different backends now actually works
. Tested against Chromium 59.0.3071.115 / Win64
. Tested against Chromium 60.0.3110.0 / Win64
. Tested against Chromium 61.0.3141.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 / Win64
. Tested against Chromium 63.0.3205.0 / Win64
. Tested against Chromium 64.0.3282.0 / Win64 (some tests skipped)
. Tested against Chromium 62.0.3202.94 Built on Ubuntu, thanks Travis CI
0.07 2017-09-02
! Fix timers firing or not
! Implement a workaround for Chrome (not) navigating
This workaround means sleeping 0.1s to see whether the notification comes
in from Chrome after the "navigation complete" message has arrived.
Ideally we will find a way to make Chrome tell us when it will perform
HTTP transactions instead of having to wait.
. Tested against Chromium 59.0.3071.115 / Win64
. Tested against Chromium 60.0.3110.0 / Win64
. Tested against Chromium 61.0.3141.0 / Win64
. Tested against Chromium 62.0.3189.0 / Win64
. Tested against Chromium 63.0.3205.0 / Win64
. Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI
0.06 2017-08-06
. Correct the name of the examples module
. No code changes, no need to upgrade
0.05 2017-08-06
+ More robust handling of Chrome disconnects
It seems that Chromium 62+ disconnects all clients when a tab is closed
! ->get now always waits for an HTTP response
. Tested against Chromium 59.0.3071.115 / Win64
. Tested against Chromium 60.0.3110.0 / Win64
. Tested against Chromium 61.0.3140.0 / Win64
. Tested against Chromium 61.0.3141.0 / Win64
. Tested against Chromium 62.0.3178.0 / Win64
. Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI
0.04 2017-07-01
+ Fix maximum websocket message size
This was "randomly" breaking transfers with large assets.
0.03 2017-06-30
! The "profile" option now really uses the profile, not the data directory.
+ New option "data_directory" to set the base data directory.
+ We run all tests with a temporary user now instead of the default user
that might be your current Chrome user
+ Tests now run headless by default
+ The backend event loop can be selected from the environment
. Tested against Chromium 59.0.3071.115 / Win64
. Tested against Chromium 60.0.3110.0 / Win64
. Tested against Chromium 61.0.3140.0 / Win64
. Tested against Chromium 61.0.3141.0 / Win64
. Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI
0.02 2017-06-23
+ Many more functions
+ Screencast ability
+ ->stop() function
+ Handling of Javascript dialogs
. Tested against Chromium 60.0.3110.0 / Win64
. Tested against Chromium 61.0.3140.0 / Win64
. Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI
0.01 2017-06-02
. Released unto an unsuspecting audience
. Tested against Chromium 60.0.3110.0 / Win64
. Tested against Chromium 58.0.3029.110 Built on Ubuntu, thanks Travis CI