perl selenium: Test :: Exception, правильное использование и хороший пример кода? - PullRequest
0 голосов
/ 28 марта 2011

В IDE Селена шаблон кода, установленный драйвером / форматтером perl, содержит строку кода

use Test::Exception;

по умолчанию.

У меня есть несколько вопросов об этом модуле в отношении теста:: WWW :: Selenium.

Следует ли вообще использовать Test :: Exception в моих файлах .t?

До сих пор я не использовал никаких методов изэто и мои тесты работают нормально (я обычно делаю Happy-Path Testing).

Теперь у меня есть потенциальное применение.Я заметил, что объект селен иногда умирает, если он не может найти что-то на странице или если локатор неверен и т. Д. Во многих случаях я хочу, чтобы мои тесты продолжались, то есть Selenium не должен умирать и продолжать делать что-то на странице.

Будет ли это правильным использованием метода Test :: Exception? Должен ли я попытаться объединить его с Try :: Tiny?

Вот небольшой вспомогательный метод, который я только что написал.Методlife_and принадлежит Test :: Exception.

sub verify_text_qr {
    my ( $sel, $text ) = @_;

    #$sel - the selenium object
    #$text ||= 'I think that'; # some text I am looking for on the page

     lives_and( sub { 
        my $found = $sel->get_text("//p[contains(text(), '$text')]");
        like( $found, qr /$text/) 
    }, 
        "found '$text' on page" );


}

Edit - (вопрос все еще остается без ответа - я только немного улучшил метод, сделав его более надежным):

sub verify_text_qr {
    my ( $sel, $text ) = @_;

    #my $text = 'Es ist unstrittig, dass ';
    my $found;
    lives_and(
        sub {
            try {
                $found = $sel->get_text("//p[contains(text(), '$text')]");
            }
            catch {
                fail( "cannot find '$text': " . $_ );
                $found = 0;
                note "on page " . $sel->get_location()  . ", " . $sel->get_title();
            };
            SKIP: {
                skip "no use in searching for '$text'", 1 unless $found; 
                like( $found, qr/$text/ ); # or $sel->like() ??
            }

        },
        "looked for '$text' on page"
    );

}

1 Ответ

5 голосов
/ 28 марта 2011

Вы не должны объединяться с Try :: Tiny , потому что Test :: Exception ловит его для вас. Простая демонстрация:

use Test::More;
use Test::Exception;

lives_and { is not_throwing(), "42" } 'passing test';
lives_and { is     throwing(), "42" } 'failing test';

done_testing;

sub not_throwing { 42 }
sub throwing     { die "failed" }

Так что я бы использовал его так же, как ваш первый фрагмент. Вы также можете рассмотреть возможность использования Test :: Fatal , который является несколько более легким подходом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...