2010-12-21 85 views
3

我们有一个表单,它有几个单独的提交按钮,可以执行不同的操作。问题是我有几个按钮,它们具有以下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

我很确定你不应该在页面上有两个同名的按钮。这可能是你的问题的一部分。 – 2010-12-21 19:52:16

+0

@Alex我不幸的是没有控制,但。 – Scott 2010-12-21 19:54:49

回答

3

一个相当贫民窟的解决方法是手动遍历有问题的表单中的所有控件,然后根据条件从不需要的表单中删除控件。例如:

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

这里最好的办法是限制你迭代到SubmitControl对象的控件。这样,您将限制表单为一个提交按钮,并且browser.submit()方法将无法选择要单击的内容。