[Checkins] SVN: zc.testbrowser/trunk/src/zc/testbrowser/real.
implement Form.getControl
Justas SadzeviÃÂius
justas at pov.lt
Tue Sep 25 14:48:29 EDT 2007
Log message for revision 80038:
implement Form.getControl
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 18:46:57 UTC (rev 80037)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.js 2007-09-25 18:48:29 UTC (rev 80038)
@@ -12,11 +12,17 @@
pattern, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}
-function tb_xpath_tokens(pattern, context) {
+function tb_xpath_tokens(pattern, contextToken) {
var tokens = new Array();
- var result = tb_xpath(pattern, context)
+ var context = null;
+ if (contextToken != null) {
+ context = tb_tokens[contextToken]
+ }
+ var result = tb_xpath(pattern, context);
+ var debug_tokens = new Array();
for (var c = 0; c < result.snapshotLength; c++) {
tb_tokens[tb_next_token] = result.snapshotItem(c);
+ debug_tokens.push(tb_tokens[tb_next_token].tagName);
tokens.push(tb_next_token++);
}
return tokens.toSource();
@@ -154,7 +160,7 @@
function tb_get_control_by_predicate(
predicate, index, allowDuplicate, context, xpath) {
if (xpath == null) {
- var xpath = '//input | //select | //option | //textarea';
+ var xpath = './/input | .//select | .//option | .//textarea';
}
var res = tb_xpath(xpath, context)
var i=0;
@@ -245,14 +251,22 @@
}, index, false, context, xpath)
}
-function tb_get_control_by_name(name, index) {
+function tb_get_control_by_name(name, index, contextToken, xpath) {
return tb_get_control_by_predicate(
function (control) {
var controlName = control.getAttribute('name');
return controlName != null && controlName.indexOf(name) != -1;
- }, index, true)
+ }, index, true, tb_tokens[contextToken], xpath)
}
+function tb_get_control_by_id(id, index, contextToken, xpath) {
+ return tb_get_control_by_predicate(
+ function (control) {
+ var controlId = control.getAttribute('id');
+ return controlId != null && controlName.indexOf(id) != -1;
+ }, index, true, tb_tokens[contextToken], xpath)
+}
+
function tb_get_listcontrol_options(token) {
var elem = tb_tokens[token];
var tagName = elem.tagName;
Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.py
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.py 2007-09-25 18:46:57 UTC (rev 80037)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.py 2007-09-25 18:48:29 UTC (rev 80038)
@@ -240,33 +240,49 @@
def _follow_link(self, token):
self.execute('tb_follow_link(%s)' % token)
+ def getControlToken(self, label=None, name=None, index=None,
+ _token=None, _xpath=None):
+ js_index = simplejson.dumps(index)
+ token = None
+ if label is not None:
+ token = self.execute('tb_get_control_by_label(%s, %s, %s, %s)'
+ % (simplejson.dumps(label), js_index,
+ simplejson.dumps(_token),
+ simplejson.dumps(_xpath)))
+ elif name is not None:
+ token = self.execute('tb_get_control_by_name(%s, %s, %s, %s)'
+ % (simplejson.dumps(name), js_index,
+ simplejson.dumps(_token),
+ simplejson.dumps(_xpath)))
+ elif id is not None:
+ token = self.execute('tb_get_control_by_id(%s, %s, %s, %s)'
+ % (simplejson.dumps(id), js_index,
+ simplejson.dumps(_token),
+ simplejson.dumps(_xpath)))
+ return token
+
def getControl(self, label=None, name=None, index=None):
zc.testbrowser.browser.onlyOne([label, name], '"label" and "name"')
- js_index = simplejson.dumps(index)
- selectionItem = False
+ token = self.getControlToken(label, name, index)
+
if label is not None:
msg = 'label %r' % label
- token = self.execute('tb_get_control_by_label(%s, %s)'
- % (simplejson.dumps(label), js_index))
- if (token not in ('false', 'ambiguity error')):
- inputType = self.execute(
- 'tb_tokens[%s].getAttribute("type")' % token)
- if inputType and inputType.lower() in ('radio', 'checkbox'):
- selectionItem = True
elif name is not None:
msg = 'name %r' % name
- token = self.execute('tb_get_control_by_name(%s, %s)'
- % (simplejson.dumps(name), js_index))
elif id is not None:
msg = 'id %r' % id
- token = self.execute('tb_get_control_by_id(%s, %s)'
- % (simplejson.dumps(id), js_index))
+ 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
+
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):
@@ -486,30 +502,25 @@
def getControl(self, label=None, value=None, index=None):
if self._browser_counter != self.browser._counter:
raise zc.testbrowser.interfaces.ExpiredError
-
zc.testbrowser.browser.onlyOne([label, value], '"label" and "value"')
- js_index = simplejson.dumps(index)
- selectionItem = False
if label is not None:
msg = 'label %r' % label
- token = self.browser.execute(
- 'tb_get_control_by_label(%s, %s, %r, ".//input | .//option")'
- % (simplejson.dumps(label), js_index, self.token))
- if (token not in ('false', 'ambiguity error')):
- inputType = self.browser.execute(
- 'tb_tokens[%s].getAttribute("type")' % token)
- if inputType and inputType.lower() in ('radio', 'checkbox'):
- selectionItem = True
elif name is not None:
msg = 'name %r' % name
- token = self.browser.execute('tb_get_control_by_name(%s, %s)'
- % (simplejson.dumps(name), js_index))
elif id is not None:
msg = 'id %r' % id
- token = self.browser.execute('tb_get_control_by_id(%s, %s)'
- % (simplejson.dumps(id), js_index))
+ selectionItem = False
+ token = self.browser.getControlToken(
+ label, value, index, self.token, ".//input | .//option")
+
+ if (token not in ('false', 'ambiguity error')):
+ inputType = self.browser.execute(
+ 'tb_tokens[%s].getAttribute("type")' % token)
+ if inputType and inputType.lower() in ('radio', 'checkbox'):
+ selectionItem = True
+
if token == 'false':
raise LookupError(msg)
elif token == 'ambiguity error':
@@ -660,4 +671,30 @@
raise NotImplementedError
def getControl(self, label=None, name=None, index=None):
- raise NotImplementedError
+ if self._browser_counter != self.browser._counter:
+ raise zc.testbrowser.interfaces.ExpiredError
+ zc.testbrowser.browser.onlyOne([label, name], '"label" and "name"')
+
+ 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
+ token = self.browser.getControlToken(
+ label, name, index, self.token)
+
+ if (token not in ('false', 'ambiguity error')):
+ inputType = self.browser.execute(
+ 'tb_tokens[%s].getAttribute("type")' % token)
+ if inputType and inputType.lower() in ('radio', 'checkbox'):
+ selectionItem = True
+
+ if token == 'false':
+ raise LookupError(msg)
+ elif token == 'ambiguity error':
+ raise AmbiguityError(msg)
+
+ return controlFactory(token, self.browser, selectionItem)
More information about the Checkins
mailing list