Используйте getControl для управления объектами, отличными от переменной имени.
Вопрос
Я использую тестовый браузер Zope, рекомендованный в моем последнем вопросе.Проблема, с которой я столкнулся, заключается в том, что я могу использовать функцию getControl для управления различными объектами, например:пароль, имя пользователя и т. д.
Я пытаюсь отправить страницу, чтобы перейти на следующую страницу, но кнопка отправки не имеет переменной «имя», а только переменную «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>
У меня нет доступа, чтобы изменить это.Код zope Python, который я использую для получения контроля над объектом «пароль», следующий:
browser.getControl(name='password')
У кнопки отправки нет имени, поэтому я написал:
browser.getControl(id='lgn_button')
Это выводит ошибку о том, что «id» недействителен:
TypeError: getControl() got an unexpected keyword argument 'id'
Есть ли способ получить контроль над одним из других значений в «отправить».
Спасибо за любую помощь.
Решение
Я предполагаю, что по той или иной причине вы не можете добавить атрибут «имя» в свой тег, но если вы не можете добавить только «имя», вы можете явно установить атрибут «value=Submit» ( вместо того, чтобы полагаться на вариант по умолчанию, который является Submit), а затем используйте браузер.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.;)