Perl WWW :: Механизация, проблема перенаправления ссылок - PullRequest
4 голосов
/ 29 апреля 2011

Я использую WWW :: Mechanize :: Shell для тестирования.

мой код такой:

#!/usr/bin/perl
use WWW::Mechanize;
use HTTP::Cookies;

my $url = "http://mysite/app/login.jsp";
my $username = "username";
my $password = "asdfasdf";
my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->get($url);
$mech->form_number(1);
$mech->field(j_username => $username);
$mech->field(j_password => $password);
$mech->click();
$mech->follow_link(text => "LINK A", n => 1);   
$mech->follow_link(text => "LINK B", n => 1);   

........................ ........................ ........................ и т. д. и т. д.

проблема заключается в следующем:

LINK B (web_page_b.html), сделайте перенаправление на web_page_x.html

, если я распечатываю содержимое $ mech-> content (), отобразимweb_page_b.html

но мне нужно отобразить web_page_x.html, чтобы автоматически отправить HTML-форму (web_page_x.html)

Вопрос:

Как получить web_page_x.html?

спасибо

Ответы [ 2 ]

3 голосов
/ 30 апреля 2011

Почему бы вам сначала не проверить, существует ли код, содержащий перенаправление (я полагаю, это тег <META>?) На web_page_b.html, а затем сразу перейти к следующей странице, как только вы убедитесь, чтоэто то, что сделал бы браузер.

Это будет выглядеть примерно так:

  $mech->follow_link(text => "LINK B", n => 1);
  unless($mech->content() =~ /<meta http-equiv="refresh" content="5;url=(.*?)">/i) {
     die("Test failed: web_page_b.html does not contain META refresh tag!");
  }
  my $expected_redirect = $1;      # This should be 'web_page_x.html'
  $mech->get($expected_redirect);  # You might need to add the server name into this URL

Кстати, если вы проводите какое-либо тестирование с WWW::Mechanize, вам действительно стоит проверить Test :: WWW :: Mechanize и другие модули тестирования Perl!Они делают жизнь намного проще.

0 голосов
/ 30 апреля 2011

Если он не перенаправляет, лучше использовать регулярное выражение с этим методом follow_link, а не просто текст.

, таких как:

$mech->follow_link(url_regex => qr/web_page_b/i , n => 1);  

то же самое для другой ссылки.

...