在selenium IDE中,perl驱动程序/格式化程序安装的代码模板包含
use Test::Exception;
默认情况下的代码行。
我对这个模块有一些问题:测试:: WWW :: Selenium。
我的.t文件中是否应该使用Test :: Exception?
到目前为止,我没有使用任何方法,我的测试运行得很好(我通常做快乐路径测试)。
现在我想出了一个潜在的用途。我注意到,如果selenium对象无法在页面上找到某些内容或者定位器错误等,有时会死亡。在许多情况下,我希望我的测试继续进行,即Selenium不会死,并继续在页面上执行操作。
这是否正确使用了Test :: Exception方法? 我应该尝试将它与Try :: Tiny结合使用吗?
这是我刚写的一个小助手方法。 lives_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" );
}
编辑 - (问题仍然没有答案 - 我只是稍微增强了方法,使其更加健壮):
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"
);
}
答案 0 :(得分:5)
您不应与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,这是一种更轻量级的方法。