En utilisant Python Mechanize comme « Tamper Data »
Question
J'écris un script de test web avec Python (2.6) et mécaniser (0.1.11). La page Je travaille avec a un formulaire HTML avec un champ de sélection comme ceci:
<select name="field1" size="1">
<option value="A" selected>A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
En mécaniser, si je tente quelque chose comme ceci:
browser.form['field1'] = ['E']
Je reçois une erreur: ClientForm.ItemNotFoundError: insufficient items with name 'E'
Je peux le faire manuellement avec l'extension firefox "Tamper Data". Est-il possible de le faire avec python et mécaniser? Puis-je convaincre en quelque sorte mécaniser que la forme a en fait la valeur que je veux soumettre?
La solution
Après avoir farfouillé avec les tripes ClientForm, il semble que vous pouvez bidouiller en ajoutant un autre élément.
Pour un champ de sélection, quelque chose comme cela semble fonctionner:
xitem = ClientForm.Item(browser.form.find_control(name="field1"),
{'contents':'E', 'value':'E', 'label':'E'})
De même, pour un contrôle de bouton radio
xitem = ClientForm.Item(browser.form.find_control(name="field2"),
{'type':'radio', 'name':'field2', 'value':'X'})
Notez que le initialiseur article mettra automatiquement à jour la liste des éléments pour le contrôle spécifié, donc il vous suffit de créer l'élément correctement pour qu'il apparaisse.