Anonymous avatar Anonymous committed 1787756

Support for unchecking radio buttons and clearing selections

Comments (0)

Files changed (1)


         """Uncheck a checkbox."""
         el = self._get_element(selector_or_element)
-        if el.tagName() == "INPUT" and el.attribute('type') == 'checkbox':
+        if el.tagName() == "INPUT" and el.attribute('type') in ('radio', 'checkbox'):
             raise PunkyFormControlMismatch("Cannot 'uncheck()' {0} element {1}".format(
+    def unselect(self, selector_or_element):
+        """Un-mark a select widget's option."""
+        el = self._get_element(selector_or_element)
+        if el.tagName() == "OPTION":
+            # Make sure to mark the option as unselected, but also manually
+            # trigger the 'change' event of the SELECT element
+            el.evaluateJavaScript("""
+                this.selected = false;
+                (function(selectEl) {
+                    var evt = document.createEvent('HTMLEvents');
+                    evt.initEvent('change', true, true);
+                    selectEl.dispatchEvent(evt);
+                })(this.parentNode);
+            """)
+        else:
+            raise PunkyFormControlMismatch("Cannot 'select()' {0} element {1}".format(
+                    el.tagName(),
+                    dict((str(i), str(el.attribute(i)))
+                        for i in el.attributeNames())
+                    )
+                )
     #{ Extract values
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.