[Zope-dev] Strange zc.testbrowser.real issues (javascript problem)
Graham Stratton
gns24 at mythic-beasts.com
Sun Jul 20 00:13:06 EDT 2008
Hi, I've been developing tutorialtest ( http://grahamstratton.org/straightornamental/entries/z3ctutorialtest
), and hit on a couple of issues with zc.testbrowser.real. These may
be Firefox bugs, but I know very little about DOM stuff, and my
Javascript books are 11,000 miles away.
My web application allows the user to toggle the visibility of some
forms. I found that setting the value of form elements in forms that
had at one point been hidden failed. It turns out that
setAttribute('value', ...) stops working, as shown in the REPL session
below.
Initally it's possible to set values quite happily (note that
element.value consistently gives the value that is displayed and
submitted. element.getAttribute(value) consistently gives the value
set with setAttribute; the problem is when these differ):
repl>
content
.document.getElementById('form.name').setAttribute('value','three')
repl> content.document.getElementById('form.name').value
"three"
repl>
content
.document.getElementById('form.name').setAttribute('value','four')
repl> content.document.getElementById('form.name').value
"four"
Now if we hide and show the element (or any enclosing element),
setAttribute stops working:
repl> content.document.getElementById('form.name').style.display
""
repl> content.document.getElementById('form.name').style.display =
'none'
"none"
repl> content.document.getElementById('form.name').style.display = ''
""
repl>
content
.document.getElementById('form.name').setAttribute('value','three')
repl> content.document.getElementById('form.name').value
"four"
I edited real.py to read and write the property directly rather than
using (s/g)etAttribute for all elements except file controls. After
that, all the tests still pass. I suspect this is not good practice,
but it makes it work. Should I check in this patch, or is there a
better fix?
Many thanks,
Graham
Patch against MozLab 0.1.9 branch of zc.testbrowser:
Index: src/zc/testbrowser/real.py
===================================================================
--- src/zc/testbrowser/real.py (revision 88569)
+++ src/zc/testbrowser/real.py (working copy)
@@ -399,7 +399,7 @@
def value():
def fget(self):
- if self.type == 'textarea':
+ if self.type != 'file':
return self.browser.execute('tb_tokens[%s].value'
% self.token)
return self.browser.execute(
@@ -419,7 +419,7 @@
self.mech_control.items[0].selected = bool(value)
else:
self.browser.execute(
- 'tb_tokens[%s].setAttribute("value", %s)' %(
+ 'tb_tokens[%s].value = %s' %(
self.token, simplejson.dumps(value)))
return property(fget, fset)
More information about the Zope-Dev
mailing list