硒+;Perl:检查警报是否存在?
Selenium 2.*在Linux上运行,Firefox作为浏览器 我正在使用perl和Selenium::Remote::Driver模块与服务器交互 是否有任何东西可用于检查是否存在警报?perl模块提供了几个函数来单击警报上的OK,或者从中获取文本,但是如果没有警报,这将引发一个错误-如何避免错误并仍然消除任何警报 基本上,我希望在页面加载完成后删除所有警报(如果有),但不确定如何删除 我尝试的另一个选项是通过在firefox配置文件中设置一个变量来禁用所有警报(当您自己使用浏览器时,该变量会起作用),但不知何故,当Selenium使用浏览器时,警报仍然存在,因为我认为Selenium处理警报本身是因为“handlesAlerts”功能,该功能始终设置为true,我不知道如何禁用它。如果无法检查是否存在警报,则可能是解决方案硒+;Perl:检查警报是否存在?,perl,selenium,alert,Perl,Selenium,Alert,Selenium 2.*在Linux上运行,Firefox作为浏览器 我正在使用perl和Selenium::Remote::Driver模块与服务器交互 是否有任何东西可用于检查是否存在警报?perl模块提供了几个函数来单击警报上的OK,或者从中获取文本,但是如果没有警报,这将引发一个错误-如何避免错误并仍然消除任何警报 基本上,我希望在页面加载完成后删除所有警报(如果有),但不确定如何删除 我尝试的另一个选项是通过在firefox配置文件中设置一个变量来禁用所有警报(当您自己使用浏览器时,该
有人有主意吗?您可以尝试取消警报,使用eval block处理异常
eval {
$driver->accept_alert;
};
if ($@){
warn "Maybe no alert?":
warn $@;
}
我创建了两个函数来检查警报,然后根据需要取消或与之交互
use Try::Tiny qw( try catch );
# checks if there is a javascript alert/confirm/input on the screen
sub alert_is_present
{
my $d = shift;
my $alertPresent = 0;
try{
my $alertTxt = $d->get_alert_text();
logIt( "alert open: $alertTxt", 'DEBUG' ) if $alertTxt;
$alertPresent++;
}catch{
my $err = $_;
if( $err =~ 'modal dialog when one was not open' ){
logIt( 'no alert open', 'DEBUG2' );
}else{
logIt( "ERROR: getting alert_text: $_", 'ERROR' );
}
};
return $alertPresent;
}
# Assumes caller confirmed an alert is present!! Either cancels the alert or
types any passed in data and accepts it.
sub handle_alert
{
my ( $d, $action, $data ) = @_;
logIt( "handle_alert called with: $action, $data", 'DEBUG' );
if( $action eq 'CANCEL' ){
$d->dismiss_alert();
}else{
$d->send_keys_to_alert( $data )
if $data;
$d->accept_alert();
}
$d->pause( 500 );
}
这似乎管用,谢谢!我有一个页面,有时确认对话框无法按预期弹出,并且accept_警报导致了致命错误。到目前为止,将其包装在评估中似乎有效,但我必须运行一段时间才能确定。