'Locate and return some specific control within the form.
At least one of the name, type, kind, predicate and nr arguments must
be supplied.  If no matching control is found, ControlNotFoundError is
raised.
If name is specified, then the control must have the indicated name.
If type is specified then the control must have the specified type (in
addition to the types possible for <input> HTML tags: "text",
"password", "hidden", "submit", "image", "button", "radio", "checkbox",
"file" we also have "reset", "buttonbutton", "submitbutton",
"resetbutton", "textarea", "select" and "isindex").
If kind is specified, then the control must fall into the specified
group, each of which satisfies a particular interface.  The types are
"text", "list", "multilist", "singlelist", "clickable" and "file".
If id is specified, then the control must have the indicated id.
If predicate is specified, then the control must match that function.
The predicate function is passed the control as its single argument,
and should return a boolean value indicating whether the control
matched.
nr, if supplied, is the sequence number of the control (where 0 is the
first).  Note that control 0 is the first control matching all the
other arguments (if supplied); it is not necessarily the first control
in the form.  If no nr is supplied, AmbiguityError is raised if
multiple controls match the other arguments (unless the
.backwards-compat attribute is true).
If label is specified, then the control must have this label.  Note
that radio controls and checkboxes never have labels: their items do.'

def find_control(self, name=None, type=None, kind=None, id=None, predicate=None, nr=None, label=None):

    if ((name is None) and (type is None) and (kind is None) and (id is None) and (label is None) and (predicate is None) and (nr is None)):
        raise ValueError('at    least    one    argument    must    be    supplied    to    specify    control')
    return self._find_control(name, type, kind, id, label, predicate, nr)
