[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