[Checkins] SVN: zc.testbrowser/trunk/src/zc/testbrowser/real.
implement Form.submit
Justas SadzeviÃÂius
justas at pov.lt
Tue Sep 25 15:52:17 EDT 2007
Log message for revision 80043:
implement Form.submit
Changed:
U zc.testbrowser/trunk/src/zc/testbrowser/real.js
U zc.testbrowser/trunk/src/zc/testbrowser/real.py
-=-
Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.js
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.js 2007-09-25 19:48:23 UTC (rev 80042)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.js 2007-09-25 19:52:16 UTC (rev 80043)
@@ -126,13 +126,21 @@
persist.saveURI(source, null, null, null, null, file);
}
-function tb_follow_link(token) {
+function tb_click_token(token, client_x, client_y) {
var a = tb_tokens[token];
var evt = a.ownerDocument.createEvent('MouseEvents');
+ if (client_x == null) client_x = 0;
+ if (client_y == null) client_y = 0;
evt.initMouseEvent('click', true, true, a.ownerDocument.defaultView,
- 1, 0, 0, 0, 0, false, false, false, false, 0, null);
+ 1, 0, 0, client_x, client_y, false, false, false, false, 0, null);
a.dispatchEvent(evt);
+}
+
+function tb_follow_link(token) {
+ tb_click_token(token);
// empty the tokens data structure, they're all expired now
+ // XXX: justas: really? what about links which do not lead from the page
+ // and are only used for javascript onclick event?
tb_tokens = {};
}
@@ -220,6 +228,10 @@
else if (tag == 'SUBMIT' || tag == 'BUTTON') {
labelText = control.getAttribute('value');
}
+ else if (tag == 'INPUT' &&
+ control.getAttribute('type').toUpperCase() == 'SUBMIT') {
+ labelText = control.getAttribute('value');
+ }
else {
var id = control.getAttribute('id');
var name = control.getAttribute('name');
Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.py
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.py 2007-09-25 19:48:23 UTC (rev 80042)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.py 2007-09-25 19:52:16 UTC (rev 80043)
@@ -245,22 +245,30 @@
js_index = simplejson.dumps(index)
token = None
if label is not None:
+ msg = 'label %r' % label
token = self.execute('tb_get_control_by_label(%s, %s, %s, %s)'
% (simplejson.dumps(label), js_index,
simplejson.dumps(context_token),
simplejson.dumps(xpath)))
elif name is not None:
+ msg = 'name %r' % name
token = self.execute('tb_get_control_by_name(%s, %s, %s, %s)'
% (simplejson.dumps(name), js_index,
simplejson.dumps(context_token),
simplejson.dumps(xpath)))
elif id is not None:
+ msg = 'id %r' % id
token = self.execute('tb_get_control_by_id(%s, %s, %s, %s)'
% (simplejson.dumps(id), js_index,
simplejson.dumps(context_token),
simplejson.dumps(xpath)))
else:
raise NotImplementedError
+
+ if token == 'false':
+ raise LookupError(msg)
+ elif token == 'ambiguity error':
+ raise AmbiguityError(msg)
return token
def getControl(self, label=None, name=None, index=None,
@@ -268,24 +276,12 @@
zc.testbrowser.browser.onlyOne([label, name], '"label" and "name"')
token = self.getControlToken(label, name, index, context_token, xpath)
- if label is not None:
- msg = 'label %r' % label
- elif name is not None:
- msg = 'name %r' % name
- elif id is not None:
- msg = 'id %r' % id
-
selectionItem = False
- if (token not in ('false', 'ambiguity error')):
- inputType = self.execute(
- 'tb_tokens[%s].getAttribute("type")' % token)
- if inputType and inputType.lower() in ('radio', 'checkbox'):
- setlectionItem = True
+ inputType = self.execute(
+ 'tb_tokens[%s].getAttribute("type")' % token)
+ if inputType and inputType.lower() in ('radio', 'checkbox'):
+ setlectionItem = True
- if token == 'false':
- raise LookupError(msg)
- elif token == 'ambiguity error':
- raise AmbiguityError(msg)
return controlFactory(token, self, selectionItem)
def getForm(self, id=None, name=None, action=None, index=None):
@@ -650,8 +646,20 @@
return self.browser.getAttribute(self.token, 'id')
def submit(self, label=None, name=None, index=None, coord=(1,1)):
- raise NotImplementedError
+ if self._browser_counter != self.browser._counter:
+ raise zc.testbrowser.interfaces.ExpiredError
+ self.browser.start_timer()
+ button = self.browser.getControlToken(
+ label, name, index, self.token, ".//input[@type='submit']")
+ self.browser.execute('tb_click_token(%s, %s, %s)' % (
+ button,
+ simplejson.dumps(coord[0]),
+ simplejson.dumps(coord[1])))
+ self.browser.stop_timer()
+ # XXX: justas: not sure the browser always changes
+ self.browser._changed()
+
def getControl(self, label=None, name=None, index=None):
if self._browser_counter != self.browser._counter:
raise zc.testbrowser.interfaces.ExpiredError
More information about the Checkins
mailing list