Bonjour,
Edit: je considère qu'il s'agit d'un bug HttpUnit, et passerait à résolu quand le problème sera corrigé (je n'attends plus forcément de réponse, j'ai mis un moyen de contournement dans mon dernier message)
Ce signalement est l'explication du post: [ame="http://www.developpez.net/forums/showthread.php?t=378397"][HttpUnit] recupération Image dans une ligne.[/ame]
Mais comme je trouve l'explication intéressante, mais le sujet long à lire, voici un résumé:
Page HTML de référence:
Ici, c'est simple, on a un tableau (qui commence par "1tric") contenant une image à la cellule (0,1) du tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <body> <table> <tr> <td>1tric</td> <td> <a href="/ff"><img src="img/1.gif" title="Supprimer"></a> </td> </tr> </table> </body> </html>
But de la manoeuvre:
Récupérer l'image de cette ligne.
Code qui ne fonctionne pas:
=> Utilisation getTableStartingWith("1tric")
Code qui fonctionne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public static void main(String[] args) { try { //connexion WebConversation webConversation = new WebConversation(); String url = "http://localhost/test/test.html"; WebRequest webRequest = new GetMethodWebRequest(url); WebResponse webResponse = webConversation.getResponse(webRequest); // Récupération de la table commençant par 1tric WebTable wt = webResponse.getTableStartingWith("1tric"); // Récupération de l'image par son titre HTMLElement[] emt = wt.getTableCell(0, 1).getElementsWithAttribute("title","Supprimer"); for (HTMLElement elt : emt) { log4j_logger.debug("Ok, j'ai récupéré"); } log4j_logger.debug("FIN"); } catch (Exception e) { log4j_logger.debug("Erreur pas le temps de la gérer"); e.printStackTrace(); } }
=> Utilisation getTables()[0]
Ce code fonctionne, j'en conclue que récupérer un tableau par sa première cellule, ou par sa position est différent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public static void main(String[] args) { try { //connexion WebConversation webConversation = new WebConversation(); String url = "http://localhost/test/test.html"; WebRequest webRequest = new GetMethodWebRequest(url); WebResponse webResponse = webConversation.getResponse(webRequest); // Récupération de la première table WebTable wt = webResponse.getTables()[0]; // Récupération de l'image par son titre HTMLElement[] emt = wt.getTableCell(0, 1).getElementsWithAttribute("title","Supprimer"); for (HTMLElement elt : emt) { log4j_logger.debug("Ok, j'ai récupéré"); } log4j_logger.debug("FIN"); } catch (Exception e) { log4j_logger.debug("Erreur pas le temps de la gérer"); e.printStackTrace(); } }
Je pense donc qu'il s'agit d'un bug, car normalement, le WebTable est le même.
Pour aller plus loin:
En fait, dans la solution qui ne fonctionne pas. la cellule ne contenant que l'image, n'est pas considérée comme une cellule (vous pouvez insérer d'autres cellules et afficher le contenu ou les comptez....)
Par contre, si l'image contient aussi du texte:
Là ça marche.<a href="/ff"><img src="img/1.gif" title="Supprimer">a</a>
J'espère que cela aidera quelqu'un car moi, j'ai bien galéré pour trouver.
Mon problème, c'est que vu le nombre de tables imbriquées les unes dans les autres dans la vraie page que j'utilise, cela va être beaucoup moins propre de ne pas utiliser getTableStartingWith
Donc si quelqu'un connait une parade (j'utilise httpUnit1.6.2): Une nouvelle version, un patch, une autre méthode similaire à la récupération par le nom et qui fonctionne, ça m'intéresse.
Je suis preneur.
Richard.
Edit:
Marrant:
Les 2 objets sont identiques et la recherche sur les 2 objets ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 WebTable wt = webResponse.getTables()[0]; WebTable wt2 = webResponse.getTableStartingWith("1tric"); if (wt.equals(wt2)) { System.out.println("OK"); }
wt réussissait la recherche, mais en déclarant wt2, il n'y arrive plus. ..
Partager