Roland Schmitz
Roland Schmitz

Reputation: 115

Perl & Selenium fire event manually

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

Answers (1)

Roland Schmitz
Roland Schmitz

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

Related Questions