Lors de l'exécution d'actions sur une page Web en utilisant Test :: WWW :: Selenium, mon programme Perl écrit la sortie du test TAP dans un rapport html créé et mis à jour par TAP :: Harness.perl: écrire discrètement à IO :: Handle ouvert par TAP :: Formatter :: HTML
Mon client Selenium doit se connecter à des pages Web protégées par mot de passe, ce qui est inévitable. Ainsi, le mot de passe apparaît dans la sortie TAP.
ok 1 - open, /homepage-with-loginform.html, true
ok 2 - type, id_username, JoeSixp
ok 3 - type, id_password, secrIt
...
Pour supprimer le mot de passe de la sortie HTML, je suis venu avec la fonction ci-dessous, mais il ne fonctionne pas. Est-ce que anyony peut vous aider?
J'ai créé l'objet avec formater
my $fmt = TAP::Formatter::HTML->new;
my $harness = TAP::Harness->new({ formatter => $fmt, merge => 1 });
$harness->test_args([ "--browser=$browser", "--config=$h{config}" ]);
my $agg = $harness->runtests(@tests);
#remove passwords from HTML report
remove_password(\%h, $fmt); # %h is an options hash
...
sub remove_password {
# remove password from HTML report
my ($h, $fmt) = @_;
my $passwd = $h->{password} || "xxx-xxx";
my $outhtml = ${ $fmt->html() };
#from the TAP::Harness perldoc
#html() - This is a reference to the scalar containing the html generated on the last test run.
#Useful if you have "verbosity" set to silent, and have not provided a custom "output_fh" to write the report to.
note("replacing password with xxx-xxx in html file");
$fmt->html(\$outhtml); # does not work
$outhtml =~ s/$passwd/xxxxxx/msg; # works
{
local $/ = undef;
my $fh = $fmt->output_fh(); #An IO::Handle filehandle for printing the HTML report to.
if ($fh->opened){
#
# ??? HOW DO I unobtrusively truncate the file here?
#
print $fh $outhtml; # writes back censored HTML output
}
}
}
Je pense que ce n'est pas un simple « comment puis-je tronque un fichier en utilisant perl » question.
Le fichier est déjà ouvert par un code de bibliothèque, et le code devrait fonctionner sous Unix et Windows. le programme devrait continuer à fonctionner avec $ fh, je ne veux pas l'ouvrir et le fermer moi-même, car il pourrait confondre le module TAP :: Formatter :: HTML et il pourrait cesser de fonctionner correctement.
Mise à jour
#this gets the job done but it is kind of brutal
my $outf = $h->{outfile};
if ($fh->opened){
$fh->close();
open $fh, ">", $outf or die "cannnot open '$outf' for truncating and writing:$!";
print $fh $outhtml;
close $fh;
}
intéressant ... peut-être que je vais essayer cette expérience plus tard – knb