2010-07-26 39 views
4

Supposons que j'ai une forme comme ceci:Comment puis-je utiliser webtest pylons (coller) avec plusieurs cases à cocher avec le même nom?

<form id='myform'> 
    Favorite colors? 
    <input type='checkbox' name='color' value='Green'>Green 
    <input type='checkbox' name='color' value='Blue'>Blue 
    <input type='checkbox' name='color' value='Red'>Red 
    <input type='submit' value='Submit'> 
</form> 

Comment puis-je utiliser la bibliothèque de formulaires de webtest pour tester la présentation de plusieurs valeurs?

Répondre

4

Vous n'êtes pas sûr de la bibliothèque de formulaires, mais vous pourriez utiliser un MultiDict (vous pourriez avoir à utiliser UnicodeMultiDict dans certains cas, je ne suis pas sûr).

from webob.multidict import MultiDict 

class TestSomeController(TestController): 

    def test_something(self): 
     params = MultiDict() 
     params.add('some_param', '1') 
     params.add('color', 'Green') 
     params.add('color', 'Blue') 
     response = self.app.post(url('something'), params=params) 
     assert 'something' in response 

Je ne ai jamais utilisé WebTest de soumettre des formulaires réels, mais, en regardant la source de la classe de formulaire, vous pouvez définir l'index du champ que vous souhaitez définir désambiguïser. Je ne l'ai pas testé, mais quelque chose comme ça marcherait probablement:

form = response.form 
form.set('color', True, 0) 
form.set('color', True, 2) 
+0

(commentaire tiré d'un modification proposée): REMARQUE: La technique directement au-dessus a été testé pour fonctionner avec FormEncode (1.2.2). –