Revision history for Test-WWW-Mechanize

WWW::Mechanize and Test::WWW::Mechanize do not use for
bug tracking.  They are now being tracked via GitHub at

1.54    Tue Dec  8 23:25:06 CST 2020
Use ok() instead of cmp_ok() inside of lacks_uncapped_inputs().
This output makes more sense.

lacks_uncapped_inputs() now has a a default message if one isn't supplied.

Fixed the subtest name inside of C<lacks_ids_ok>.

Fixed the minimum version of Carp::Assert::More in Makefile.PL.

1.52    Wed Dec  5 10:00:56 CST 2018
click_ok() method can now take a button with X/Y coordinates.
Thanks to GitHub user @marderh.  (GH #45)

Added the ability to modify the HTML that the html_tidy_ok() validates.
See the content_for_validation() method. (GH #61)

Add a set of methods for existence of IDs: id_exists(), id_exists_ok(),
ids_exist_ok(), lacks_id_ok() and lacks_ids_ok(). (GH #48)

Add button_exists(), button_exists_ok() and lacks_button_ok()
methods.  (GH #50)

Clarified warnings to make it clear that certain modules are
optional. Thanks, Matthew Chae.

1.50    Mon Apr 16 15:16:59 CDT 2018
Added html_tidy_ok() methods, analogous to html_lint_ok().

Remove unnecessary dependency on HTML::TreeBuilder.  Thanks, Kent Fredric.

1.49_01 Mon Mar 26 10:58:51 CDT 2018
Adding autotidy functionality. autotidy lets you validate every page that
Mech gets using the HTML::Tidy5 module, just like the autolint feature
does with the HTML::Lint module. HTML::Tidy5 is a much more complete
HTML checking tool, and validates HTML5 which HTML::Lint does not. You
must have HTML::Tidy5 1.00 installed to use autotidy.

1.48    Thu Dec 29 22:45:29 CST 2016
The linting method html_lint_ok() was not calling the HTML::Lint API
correctly, so may have missed some HTML errors at the end of a page.
This also applies to get, post, etc if you have the autolint argument on.

Added header_exists_ok(), lacks_header(), header_is() and header_like()
methods.  Thanks to Eric A. Zarko for the original patches.

The scraped_id_is() method used to assign a description for the test if
one was not passed.  Now it does not.

scraped_id_is() now gives proper diagnostics if an ID is not found in
the HTML.

Added a delete_ok() method.  Thanks, moznion.

content_contains() now fails if it's called with a regex.  content_like()
now fails if it's not called with a regex.

The test server run during the test suite allowed URLs outside of the
document tree, which could potentially be a security problem.  This has
been fixed.  Thanks, Tynovsky.

Fixed an overly-restrictive optimization in scrape_text_by_id(), plus
scraped_id_is() and scraped_id_like() which wrap it.

The method checks to make sure that it doesn't bother looking for an ID
on the page if the ID doesn't exist.  It did this by looking for the text


where foo is the ID being searched for.  However, that would mean that
tags like

    <p id='foo'>
    <p id=foo>
    <p id = "foo">
    <p id=
    <p id

would be seen as not existing.  This has been fixed by making
scrape_text_by_id() search for the string "foo" anywhere on the page.

1.44    Sat Jun 30 20:32:04 CDT 2012
There is no new functionality in this release.

Fixed test failures on Win32.  Thanks, Jerry Gay.

1.42    Thu May 31 11:35:26 CDT 2012
If you want to use the autolint functionality, you'll have to have
HTML::Lint 2.20.

Custom lint objects don't get reset before they get used, making
autolint with a custom lint object practically useless.

1.40    Fri Apr 13 15:14:39 CDT 2012
Added a $mech->autolint() method so you can turn autolinting on and off
in mid-program.  Thanks, Mike O'Regan.

New functions $mech->scrape_text_by_id() and $mech->scrape_text_by_attr()
let you extract text from your pages.  Convenience function
$mech->scraped_id_is() makes it easy to scrape and compare in one

    <h1 id="pagetitle">My Awesome Page!</h1>

    # Verify that HTML is there with:
    $mech->scraped_id_is( 'pagetitle', 'My Awesome Page!' );

$mech->has_tag() now handles nested tags more sensibly.  This fixes
Google Code ticket #1.

Explicitly requires Test::Simple 0.94 or higher.

Brought over t/ from WWW::Mechanize which fixes a number
of problems.

1.38    Fri Oct 28 10:12:48 CDT 2011
Now passes tests even if HTML::Lint is not installed.

There are no other changes in 1.38.

1.36    Thu Oct 27 00:09:21 CDT 2011
The $mech object autolint argument can now take an HTML::Lint object.
This lets you pass your own HTML::Lint object that does less stringent
checking than the one T:W:M creates.

1.34    Tue Jul  5 16:23:24 CDT 2011
Added $mech->lacks_uncapped_inputs() to check for <input> tags that
don't have a maxlength attribute.  We've been using this for years at
work, and I'm just now moving it into Test::WWW::Mechanize.

Added $mech->grep_inputs() and $mech->grep_submits() to easily pull
input fields from the page.  I'd like to get this moved up to base
WWW::Mechanize, because it has use outside of the Test:: world.

$mech->followable_links() now finds file: URLs, too.

$mech->content_contains(), $mech->content_lacks(), $mech->text_contains(0
and $mech->text_lacks() all fail if a reference is passed instead of
a string.

$mech->text_contains() was not calling $mech->text(), so was not taking
advantage of the caching of the parsed text.

Most tests no longer use class.

All tests now run under -T and have plan counts.

1.32    Wed May 11 10:12:25 CDT 2011
No changes from 1.31_01.

1.31_01 Wed May  4 16:07:31 CDT 2011
The methods that look at the text of the page, ->text_like() and
->text_unlike(), now use the WWW::Mechanize method ->text() which caches
the text.  This will be a big speedup if you call these methods more
than once.

Normalized the use of single vs. double quotes in the default descriptions.

Fixed tests that fail under newer versions of LWP.

Fixed tests that fail if http_proxy or HTTP_PROXY are set.

Fixed tests that fail on Perl 5.14.

1.30    Wed Jun  9 12:23:48 CDT 2010
autolint used to only work on get_ok() calls.  Now it works with
post_ok(), submit_form_ok(), follow_link_ok() and click_ok().

Added $mech->text_contains(), $mech->text_like() and $mech->text_unlike()
methods.  These check the text of an HTML page separate from the
HTML markup.  Thanks to Ashley Pond V.

t/head_ok.t should no longer fail if your ISP "helpfully" returns
an IP address for non-existent DNS records.  Thanks, Schwern.

1.28    Tue Apr 13 00:44:27 CDT 2010
t/put_ok.t finally passes.

1.26    Mon Apr  5 00:54:46 CDT 2010
Description of error in $mech->content_unlike() was wrong.

Now requires Test::LongString 0.12.

t/put_ok.t now passes, but with a handful of warnings.  Help in figuring
out why would be appreciated.

Hoisted common code out of get_ok, post_ok, etc.

Updated copyright and licensing information.

1.24    Sat Jan 17 13:26:47 CST 2009
Tests run on port 13432 instead of 8080.  It should really be a
random open port, but for now, something other than 8080 will do.

1.23_01 Mon Dec 22 17:43:46 CST 2008
Tests would fail because we weren't unsetting http_proxy.

Fixed many failed tests.  Overhauled the test server setup.

Added autolinting capability, so you can do this:

    my $mech = Test::WWW::Mechanize->new( autolint => 1 );
    $mech->get_ok( $url );

and the get_ok() will fail if the page is fetched, but the resultant HTML
(if it is indeed text/html) does not pass HTML::Lint.

Added $mech->click_ok().

The user agent is now "Test-WWW-Mechanize/version" by default.

1.22    Thu Nov 20 00:33:36 CST 2008
Added $mech->head_ok() and $mech->put_ok() methods.  Thanks to
Jaldhar Vyas.

1.20    Wed Mar 12 23:56:11 CDT 2008
stuff_inputs() used to do nothing.  Now it works.

Fixed punctuation in some error messages.

Fixed compatibility with WWW::Mechanize 1.36.

1.18    Thu Dec  6 10:12:14 CST 2007
Added default descriptions for most test assertions.

HTML::Lint is now properly optional.

Added delays in all the tests that use HTTP::Server::Simple to give
it time to correctly fire up.

1.16    Mon Oct 29 15:34:21 CDT 2007
Added $mech->post_ok().  Thanks, Greg Sheard.

Added $mech->submit_form_ok().  Thanks, Mark Stosberg.

Added $mech->html_lint_ok()

Fixed some bugs that were causing test failures.

1.14    Fri May 11 16:22:02 CDT 2007
Fixes test failures.  Thanks to Mark Blackman for RT #26602:

The module tests currently spawn a server (based on
HTTP::Server::Simple::CGI) which is killed when a __DIE__
signal is received, normally only when the invoking
perl dies. However, as perlvar makes clear, the __DIE__
signal is received when eval blocks die as well. The
new version (1.22) of WWW::Mechanize now calles
HTTP::Message::decoded_content which calls
which has a eval block that require's Encode::ConfigLocal
which is usually not present, so the eval dies and the
HTTP server is killed as soon as the $mech object tries
to do a 'get'. It's simple to use a system variable,
$^S to find out if the __DIE__ signal is being called
for an eval so we ignore that case with the patch

*   Made the synopsis show that T:W:M doesn't take the tests=>$x
like other Test::* modules.  It'd be nice if it did, though.

1.12    Thu Jul  6 23:47:59 CDT 2006
Added followable_links() method to return only those links
that your mech can actually follow.

1.10    Sun Jun 18 22:58:41 CDT 2006
RT #19147: Tests turn off the http_proxy environment variable before
starting.  Thanks to Matt Trout.

RT #18779: makes stuff_inputs() conform to the documentation,
changing the implementation to expect an arrayref for $options->{ignore},
as opposed to a hashref.  Thanks to Mike O'Regan.

Added base_is, base_like and base_unlike.  Thanks to MATSUNO Tokuhiro.

1.08    Mon Nov 21 10:35:23 CST 2005
has_tag_like()'s regex was reversed, so would match when it shouldn't.
Thanks to Chris Dolan.

Added links to support sites.

1.06    Jun 29 2005
Updated test suite to use HTTP::Server::Simple.  Thanks to Shawn
Sorichetti for it.

1.05_02 Sun Apr  3 12:19:05 CDT 2005
Added has_tag() and has_tag_like().  Thanks RJBS.

1.05_01 Tue Mar  8 16:24:36 CST 2005
get_ok() now shows the status line for the mech if the test fails.

get_ok() now returns true/false, not an HTTP::Response.

1.04    Fri Mar  4 00:08:42 CST 2005
Added follow_link_ok().  Thanks to Mike O'Regan.

Added get_ok().  Thanks to Dan Friedman.

1.02    Wed Dec 15 17:35:23 CST 2004
Added content_lacks()

Fixed some documentation bugs.  Thanks to Drew Taylor.

1.00    Thu Dec  9 11:41:50 CST 2004
Added content_contains()

Fixed diagnostic errors to work the same way regardless of which
version of Test::Builder you have.

0.99    Sun Oct 24 11:17:59 CDT 2004
Added $mech->content_unlike and $mech->title_unlike

Made the reporting of where the error happened reflect the caller's

0.06    Thu Sep 30 21:49:08 CDT 2004
New funcs
    - page_links_content_like()
    - page_links_content_unlike()
    - link_content_like()
    - link_content_unlike()
    - link_status_isnt()

0.04    Mon Jul 12 22:16:10 CDT 2004
Renamed link_status() to link_status_is().

Fixed a bug in link_status_is().

0.02    July 4 2004
Added links_ok() and page_links_ok() methods.  Thanks to Shawn

0.01    Mon Jun 28 16:38:45 CDT 2004
First version, released on an unsuspecting world.