Используйте getControl для управления объектами, отличными от переменной имени.

StackOverflow https://stackoverflow.com/questions/2155403

Вопрос

Я использую тестовый браузер 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.;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top