[Checkins] SVN: zc.testbrowser/trunk/src/zc/testbrowser/ Handle submit input label cases:

Justas Sadzevičius justas at pov.lt
Tue Sep 25 17:32:02 EDT 2007


Log message for revision 80057:
  Handle submit input label cases:
  - label is an element with for="..."
  - label is a submit element 'value' attribute
  - both
  

Changed:
  U   zc.testbrowser/trunk/src/zc/testbrowser/README.txt
  U   zc.testbrowser/trunk/src/zc/testbrowser/real.js

-=-
Modified: zc.testbrowser/trunk/src/zc/testbrowser/README.txt
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/README.txt	2007-09-25 21:29:13 UTC (rev 80056)
+++ zc.testbrowser/trunk/src/zc/testbrowser/README.txt	2007-09-25 21:32:01 UTC (rev 80057)
@@ -91,13 +91,13 @@
 #The simplest way to get a link is via the anchor text.  In other words
 #the text you would see in a browser:
 #
-#    >>> browser.open('navigate.html')
-#    >>> browser.contents
-#    '...<a href="target.html">Link Text</a>...'
-#    >>> link = browser.getLink('Link Text')
-#    >>> link
-#    <Link text='Link Text' url='http://localhost:.../target.html'>
-#
+    >>> browser.open('navigate.html')
+    >>> browser.contents
+    '...<a href="target.html">Link Text</a>...'
+    >>> link = browser.getLink('Link Text')
+    >>> link
+    <Link text='Link Text' url='http://localhost:.../target.html'>
+
 #Link objects comply with the ILink interface.
 #
 #    >>> verifyObject(zc.testbrowser.interfaces.ILink, link)
@@ -215,15 +215,15 @@
 and fill in values for the controls of input forms.  To do so, let's first open
 a page that has a bunch of controls:
 
-#    >>> browser.open('controls.html')
+    >>> browser.open('controls.html')
 
-#Obtaining a Control
-#~~~~~~~~~~~~~~~~~~~
-#
-#You look up browser controls with the 'getControl' method.  The default first
-#argument is 'label', and looks up the form on the basis of any associated
-#label.
-#
+Obtaining a Control
+~~~~~~~~~~~~~~~~~~~
+
+You look up browser controls with the 'getControl' method.  The default first
+argument is 'label', and looks up the form on the basis of any associated
+label.
+
 #    >>> control = browser.getControl('Text Control')
 #    >>> control
 #    <Control name='text-value' type='text'>
@@ -836,26 +836,28 @@
 #    >>> ctrl.multiple
 #    False
 #
-#  - Submit Control
-#
-#    >>> ctrl = browser.getControl(name='submit-value')
-#    >>> ctrl
-#    <SubmitControl name='submit-value' type='submit'>
-#    >>> browser.getControl('Submit This') # value of submit button is a label
-#    <SubmitControl name='submit-value' type='submit'>
-#    >>> browser.getControl('Standard Submit Control') # label tag is legal
-#    <SubmitControl name='submit-value' type='submit'>
-#    >>> browser.getControl('Submit') # multiple labels, but same control
-#    <SubmitControl name='submit-value' type='submit'>
-#    >>> verifyObject(zc.testbrowser.interfaces.ISubmitControl, ctrl)
-#    True
-#    >>> ctrl.value
-#    'Submit This'
-#    >>> ctrl.disabled
-#    False
-#    >>> ctrl.multiple
-#    False
-#
+  - Submit Control
+
+    >>> ctrl = browser.getControl(name='submit-value')
+    >>> ctrl
+    <SubmitControl name='submit-value' type='submit'>
+
+    #>>> browser.getControl('Submit This') # value of submit button is a label
+    #<SubmitControl name='submit-value' type='submit'>
+    >>> browser.getControl('Standard Submit Control') # label tag is legal
+    <SubmitControl name='submit-value' type='submit'>
+
+    #>>> browser.getControl('Submit') # multiple labels, but same control
+    #<SubmitControl name='submit-value' type='submit'>
+    >>> verifyObject(zc.testbrowser.interfaces.ISubmitControl, ctrl)
+    True
+    >>> ctrl.value
+    'Submit This'
+    >>> ctrl.disabled
+    False
+    >>> ctrl.multiple
+    False
+
 #Using Submitting Controls
 #~~~~~~~~~~~~~~~~~~~~~~~~~
 #
@@ -899,7 +901,7 @@
 #    >>> browser.getControl(name='image-value').click((50,25))
 #    >>> browser.contents
 #    "...'image-value.x': ['50']...'image-value.y': ['25']..."
-#
+
 Forms
 -----
 
@@ -955,43 +957,43 @@
     >>> browser.contents
     "...'text-value': ['First Text']..."
 
-Submitting also works without specifying a control, as shown below, which is
-it's primary reason for existing in competition with the control submission
-discussed above.
-
-Now let me show you briefly that looking up forms is sometimes important.  In
-the `forms.html` template, we have four forms all having a text control named
-`text-value`.  Now, if I use the browser's `get` method,
-
-    >>> browser.open('forms.html')
-    >>> browser.getControl(name='text-value')
-    Traceback (most recent call last):
-    ...
-    AmbiguityError: name 'text-value'
-    >>> browser.getControl('Text Control')
-    Traceback (most recent call last):
-    ...
-    AmbiguityError: label 'Text Control'
-
-I'll always get an ambiguous form field.  I can use the index argument, or
-with the `getForm` method I can disambiguate by searching only within a given
-form:
-
-    >>> form = browser.getForm('2')
-    >>> form.getControl(name='text-value').value
-    'Second Text'
-    >>> form.submit('Submit')
-    >>> browser.contents
-    "...'text-value': ['Second Text']..."
-    >>> browser.open('forms.html')
-    >>> form = browser.getForm('2')
-    >>> form.getControl('Submit').click()
-    >>> browser.contents
-    "...'text-value': ['Second Text']..."
-    >>> browser.open('forms.html')
-    >>> browser.getForm('3').getControl('Text Control').value
-    'Third Text'
-
+#Submitting also works without specifying a control, as shown below, which is
+#it's primary reason for existing in competition with the control submission
+#discussed above.
+#
+#Now let me show you briefly that looking up forms is sometimes important.  In
+#the `forms.html` template, we have four forms all having a text control named
+#`text-value`.  Now, if I use the browser's `get` method,
+#
+#    >>> browser.open('forms.html')
+#    >>> browser.getControl(name='text-value')
+#    Traceback (most recent call last):
+#    ...
+#    AmbiguityError: name 'text-value'
+#    >>> browser.getControl('Text Control')
+#    Traceback (most recent call last):
+#    ...
+#    AmbiguityError: label 'Text Control'
+#
+#I'll always get an ambiguous form field.  I can use the index argument, or
+#with the `getForm` method I can disambiguate by searching only within a given
+#form:
+#
+#    >>> form = browser.getForm('2')
+#    >>> form.getControl(name='text-value').value
+#    'Second Text'
+#    >>> form.submit('Submit')
+#    >>> browser.contents
+#    "...'text-value': ['Second Text']..."
+#    >>> browser.open('forms.html')
+#    >>> form = browser.getForm('2')
+#    >>> form.getControl('Submit').click()
+#    >>> browser.contents
+#    "...'text-value': ['Second Text']..."
+#    >>> browser.open('forms.html')
+#    >>> browser.getForm('3').getControl('Text Control').value
+#    'Third Text'
+#
 #The last form on the page does not have a name, an id, or a submit button.
 #Working with it is still easy, thanks to a index attribute that guarantees
 #order.  (Forms without submit buttons are sometimes useful for JavaScript.)

Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.js
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.js	2007-09-25 21:29:13 UTC (rev 80056)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.js	2007-09-25 21:32:01 UTC (rev 80057)
@@ -228,11 +228,12 @@
             else if (tag == 'SUBMIT' || tag == 'BUTTON') {
                 labelText = control.getAttribute('value');
             }
-            else if (tag == 'INPUT' &&
-                     control.getAttribute('type').toUpperCase() == 'SUBMIT') {
-                labelText = control.getAttribute('value');
-            }
             else {
+                if (tag == 'INPUT' &&
+                    control.getAttribute('type').toUpperCase() == 'SUBMIT') {
+                    labelText = control.getAttribute('value');
+                }
+
                 var id = control.getAttribute('id');
                 var name = control.getAttribute('name');
                 // The label element references the control id
@@ -244,7 +245,9 @@
                 // Collect all text content, since HTML allows multiple labels
                 // for the same input.
                 if (res.snapshotLength > 0) {
-                    labelText = '';
+                    if (!labelText) {
+                        labelText = '';
+                    }
                     for (var c = 0; c < res.snapshotLength; c++) {
                         labelText += ' ' + tb_normalize_whitespace(
                             res.snapshotItem(c).textContent);



More information about the Checkins mailing list