method click_button ?name ?number ?value ?xy () =
    let args = ref [] in
    let add name f = function
      | None -> ()
      | Some p -> args := sv_of_string name :: f p :: !args
    in
    add "name" sv_of_string name;
    add "number" sv_of_int number;
    add "value" sv_of_string value;
    (match xy with
         None -> ()
       | Some (x, y) ->
           args := sv_of_string "x" :: sv_of_int x ::
             sv_of_string "y" :: sv_of_int y :: !args);
    call_method_void sv "click" !args