views:

86

answers:

1

Hello,

I am using the Zope testbrowser which has been recommended in my last question. The problem that I am facing is that I can use the getControl function to control different objects like: password, username etc.

I am trying to submit the page to get to the next page but the submit button has no 'name' variable, just an 'id' variable. 'Submit' is written as follows:

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

and the other objects are written as:

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

I have no access to change this. The python zope code I am using to gain control of the 'password' object is:

browser.getControl(name='password')

The submit button doesn't have 'name' so I have written:

browser.getControl(id='lgn_button')

This prints out the error that 'id' is invalid:

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

Is there any way to gain control of one of the other values in 'submit'.

Thanks for any help.

A: 

I assume that, for one reason or another, you can't add a 'name' attribute to your tag, but if it's only a 'name' that you can't add, you can explicitly set a 'value=Submit' (instead of relying on the default one, which is Submit) and then use browser.getControl('Submit')

Failing that, you can do something along the lines of

for form in browser.mech_browser.forms():
    for control in form.controls:
        if control.id == 'lgn_button':
            return control

You might even want to extend Browser.getControl() with that and contribute it back to zope.testbrowser. ;)

Guilherme Salgado