使用getControl来控制name变量以外的对象

时间:2010-01-28 15:01:59

标签: python testing https mechanize zope

我正在使用Zope测试浏览器,这是我在上一个问题中推荐的。我面临的问题是我可以使用getControl函数来控制不同的对象,如:密码,用户名等。

我正在尝试提交页面以进入下一页,但提交按钮没有'name'变量,只有'id'变量。 “提交”的内容如下:

<input type="submit" id="lgn_button" class="button" tabindex="3" accesskey="s" />

,其他对象写为:

<input type="password" class="button" name="password" id="password" size="24" maxlength="20" accesskey="p" tabindex="2" value=""/></td>

我无权更改此内容。我用来控制'密码'对象的python zope代码是:

browser.getControl(name='password')

提交按钮没有“名字”,所以我写了:

browser.getControl(id='lgn_button')

这会打印出'id'无效的错误:

TypeError: getControl() got an unexpected keyword argument 'id'

有没有办法控制'submit'中的其他值之一。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为,由于某种原因,您无法在代码中添加“名称”属性,但如果它只是您无法添加的“名称”,则可以明确设置'value =提交'(而不是依赖默认的提交),然后使用browser.getControl('Submit')

如果做不到这一点,你可以按照

的方式做点什么
for form in browser.mech_browser.forms():
    for control in form.controls:
        if control.id == 'lgn_button':
            return control

您甚至可能希望使用它扩展Browser.getControl()并将其贡献回zope.testbrowser。 ;)