IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tests et Performance Java Discussion :

[BUG] Image et Table


Sujet :

Tests et Performance Java

  1. #1
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut [BUG] Image et Table
    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:
    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>
    Ici, c'est simple, on a un tableau (qui commence par "1tric") contenant une image à la cellule (0,1) du tableau.

    But de la manoeuvre:
    Récupérer l'image de cette ligne.

    Code qui ne fonctionne pas:
    => Utilisation getTableStartingWith("1tric")
    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();
    	}
    }
    Code qui fonctionne:
    => Utilisation getTables()[0]
    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();
    	}
    }
    Ce code fonctionne, j'en conclue que récupérer un tableau par sa première cellule, ou par sa position est différent.

    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:
    <a href="/ff"><img src="img/1.gif" title="Supprimer">a</a>
    Là ça marche.

    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:
    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");
    }
    Les 2 objets sont identiques et la recherche sur les 2 objets ne fonctionne pas.
    wt réussissait la recherche, mais en déclarant wt2, il n'y arrive plus. ..

  2. #2
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    L'utilisation de getMatchingTables avec le predicat ci-dessou, doit récupérer le bon WebTable sans provoquer l'erreur

    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
    /** pour filtre sur les table commençant par... */
    class WebTableStartingWithPredicate implements HTMLElementPredicate {
    	public boolean matchesCriteria(Object htmlElement, Object criteria) {
    		if (htmlElement instanceof  WebTable) {
    			WebTable tmpTable = (WebTable)htmlElement;
     
    			// pour toutes les lignes
    			for (int i = 0; i < tmpTable.getRowCount(); i++ ) {
    				for (int j = 0; j < tmpTable.getColumnCount(); j++) {
    					// Si la cellule n'est pas vide
    					if ( ! tmpTable.getTableCell(i, j).getText().equals("")) {
    						return tmpTable.getTableCell(i, j).getText().equals(criteria.toString());
    					}
    				}
    			}
    		}
    		return false;
    	}
    }
    Je mettrais le bug à résolu, quand la version de httpUnit corrigera ce problème.

Discussions similaires

  1. affichage d'une image selon table sql
    Par math8811 dans le forum Langage
    Réponses: 9
    Dernier message: 27/11/2008, 11h53
  2. récupérer une image à partir table oracle
    Par ouadie99 dans le forum C#
    Réponses: 5
    Dernier message: 16/05/2008, 20h28
  3. bugs dans les tables
    Par Riwalenn dans le forum MS SQL Server
    Réponses: 19
    Dernier message: 01/10/2007, 11h43
  4. [10g] afficher image de tables et dépendances
    Par gojira dans le forum Oracle
    Réponses: 2
    Dernier message: 31/10/2006, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo