Reputation: 115
I want to set the value attribute of an input element via Perl & Selenium like this:
my $script = q{
arguments[0].setAttribute(arguments[1], arguments[2]);
};
$driver->execute_script($script, $element, $attribut, $new_value);
Which works fine, i see the new value on the screen, except that the "onchange" event is not fired this way. I tried things like:
my $script = q{
arguments[0].setAttribute(arguments[1], arguments[2]);
arguments[0].onchange();
};
but nothing happens.
Upvotes: 1
Views: 156
Reputation: 115
Here is my solution (in Perl):
sub fire_event {
my $element = shift // croak("Which element should be used to fire the even?");
my $event = shift // croak("Which event should be fired");
my $script;
if($browser eq "internet explorer") {
$script .= "var evt = document.createEventObject();";
$script .= "return arguments[0].fireEvent('on'+".$event.",evt);";
}
else {
$script .= 'var evt = document.createEvent("HTMLEvents");'."\n";;
$script .= "evt.initEvent('". $event ."', true, true );\n";
$script .= "return !arguments[0].dispatchEvent(evt);\n";
}
my $rc = $driver->execute_script($script, $element);
return $rc
}
my $returncode = fire_event($elem, "submit");
Upvotes: 1