Механизировать отправку - PullRequest
       10

Механизировать отправку

3 голосов
/ 21 декабря 2010

У нас есть форма с несколькими отдельными кнопками отправки, которые выполняют различные действия. Проблема в том, что у меня есть пара кнопок, которые имеют следующий HTML:

<input type="submit" name="submit" value="Submit" class="submitLink" title="Submit" />
<input type="submit" name="submit" value="Delete" class="submitLink" title="Delete" />

Теперь вы не можете найти элемент по значению с помощью стандартной функции find_control. Поэтому я написал предикатную функцию, которая нашла бы мой элемент, который я затем надеялся щелкнуть следующим образом:

submit_button = self.br.form.find_control(predicate=submit_button_finder)
self.br.submit(submit_button)

Тем не менее, оба отправляют и щелкают внутренне, вызывают элемент поиска, и ни один из методов не позволяет добавлять ключевое слово в предикат, поэтому такой вызов также не работает:

self.br.submit(predicate=submit_button_finder)

Есть ли что-то, что я пропускаю?!?

Обновление:

Добавлена ​​вспомогательная функция для извлечения всех элементов, которые соответствуют критериям:

def find_controls(self, name=None, type=None, kind=None, id=None, predicate=None, label=None):

  i = 0
  results = []

  try :
    while(True):
      results.append(self.browswer.find_control(name, type, kind, id, predicate, label, nr=i))
      i += 1
  except Exception as e: #Exception tossed if control not found
    pass
  return results

Затем заменили следующие строки:

submit_button = self.br.form.find_control(predicate=submit_button_finder)
self.br.submit(submit_button)

С:

submit_button = self.br.form.find_control(predicate=submit_button_finder)
submit_buttons = self.find_controls(type="submit")
for button in submit_buttons[:]:
  if (button != submit_button) : self.br.form.controls.remove(button)
self.br.submit()

1 Ответ

3 голосов
/ 21 декабря 2010

Обходной путь гетто - вручную выполнить итерацию всех элементов управления в рассматриваемой форме, а затем удалить элементы управления из формы, которые вам не нужны, на основе критериев.Например:

for each in form.controls[:]:
  if each not "some criteria":
    form.controls.remove(each)

Лучшая идея здесь - ограничить элементы управления, которые вы перебираете, ТОЛЬКО объектами SubmitControl.Таким образом, вы ограничите форму одной кнопкой отправки, а метод browser.submit () не будет выбирать, что нажимать.

...