Allow using a QWebElement to select forms directly

This commit is contained in:
Kovid Goyal 2014-10-15 10:40:15 +05:30
parent de92beb1ec
commit 3fef8ee45f

View File

@ -187,8 +187,10 @@ class FormsMixin(object):
def __init__(self): def __init__(self):
self.current_form = None self.current_form = None
def find_form(self, css2_selector=None, nr=None): def find_form(self, css2_selector=None, nr=None, qwebelement=None):
mf = self.page.mainFrame() mf = self.page.mainFrame()
if qwebelement is not None:
return Form(qwebelement)
if css2_selector is not None: if css2_selector is not None:
candidate = mf.findFirstElement(css2_selector) candidate = mf.findFirstElement(css2_selector)
if not candidate.isNull(): if not candidate.isNull():
@ -206,7 +208,7 @@ class FormsMixin(object):
mf = self.page.mainFrame() mf = self.page.mainFrame()
return list(map(Form, mf.findAllElements('form').toList())) return list(map(Form, mf.findAllElements('form').toList()))
def select_form(self, css2_selector=None, nr=None): def select_form(self, css2_selector=None, nr=None, qwebelement=None):
''' '''
Select a form for further processing. Specify the form either with Select a form for further processing. Specify the form either with
css2_selector or nr. Raises ValueError if no matching form is found. css2_selector or nr. Raises ValueError if no matching form is found.
@ -216,8 +218,10 @@ class FormsMixin(object):
:param nr: An integer >= 0. Selects the nr'th form in the current page. :param nr: An integer >= 0. Selects the nr'th form in the current page.
:param qwebelement: A QWebElement, useful is CSS selectors are insufficient
''' '''
self.current_form = self.find_form(css2_selector=css2_selector, nr=nr) self.current_form = self.find_form(css2_selector=css2_selector, nr=nr, qwebelement=qwebelement)
if self.current_form is None: if self.current_form is None:
raise ValueError('No such form found') raise ValueError('No such form found')
return self.current_form return self.current_form