2013-09-23 14 views
11

Sto tentando di mostrare dove le due pagine HTML differiscono. Sto cercando di capire un modo se posso confrontare il codice sorgente HTML di due pagine web (quasi simili), e mostrare/evidenziare le differenze visivamente (sull'interfaccia utente).Confronta due sorgenti HTML e visualizza le differenze visive

Quello che ho cercato: ho pensato di prendere snapshot della pagina e quindi utilizzare Resemble.js per confrontare due immagini. Ma questo mostra anche differenze minuscole e i risultati sono qualcosa che non è chiaro.

Ho pensato di confrontare la struttura DOM o il codice sorgente e quindi mostrare quali o dove effettivamente le due pagine differiscono su UI.

C'è un modo per raggiungere questo obiettivo? Sto usando Selenium- Webdriver per ottenere le istantanee e il codice sorgente HTML.

EDIT:

Credo che la mia domanda non era chiara. In realtà, volevo scoprire la differenza nel contenuto HTML per le pagine Web al fine di rilevare i test A/B attualmente eseguiti. Ho prima catturato il codice html in un file di testo e poi l'ho confrontato con il codice sorgente HTML precedentemente acquisito usando Java-Diff util. Questo mi ha dato le linee effettive che differiscono in due file di testo con sorgente HTML.

Ora, il problema è, come posso mostrare questa differenza sull'interfaccia utente come evidenziare le aree che ho trovato sono diverse? Spero che questo lo renderebbe più chiaro.

Il codice seguente mostra le linee che differiscono

List<String> original = fileToLines("HTML Source diff/originalSource.txt"); 
    List<String> revised = fileToLines("HTML Source diff/sourceAfterCookieClear.txt"); 

    // Compute diff. Get the Patch object. Patch is the container for computed deltas. 
    Patch patch = DiffUtils.diff(original, revised); 

    System.out.println("Printing Deltas\n"); 
    for (Delta delta : patch.getDeltas()) { 
     String revisedText = delta.getRevised().toString(); 
     String content = revisedText.substring(revisedText.indexOf(" [")+2,revisedText.indexOf("]]")); 
     writeTextToFile(content,"difference.html"); 
    } 

Qualche pista in forma di codice sarebbe utile.

+2

Utilizzare oltre il confronto – Shadow

+0

Stavo pensando a qualsiasi soluzione programmaticamente –

+0

Hai già risolto questo problema da solo? Sto cercando di costruire qualcosa di simile, solo con una mappa termica delle modifiche al codice, quindi è abbastanza interessante per me, se esiste già una soluzione sulla quale potrei almeno costruire. – ctst

risposta

0

Presumo che si desidera diff i due file di codice HTML. Nel qual caso vorrei puntare verso la seguente libreria:

http://code.google.com/p/java-diff-utils/

+0

Grazie per la risposta. Ho già affrontato questo e questo mi dice dove i due sorgenti HTML differiscono, che va bene. Sono fermo ad un punto che, come dovrei mostrare questa differenza come interfaccia utente. Intendo qualcosa di simile- evidenziando l'elemento che ha la differenza o qualcosa del genere. –

+0

In questa fase diventa troppo complicato, in realtà è necessario creare un motore per analizzare l'HTML, quindi renderlo sullo schermo mantenendo una mappatura del codice. Quindi nel tuo codice puoi puntare a un elemento e il tuo motore sarà in grado di evidenziare quell'oggetto in modo intelligente (basato su regole CSS cioè visibilità/sovrapposizione/larghezza 0px). A questo punto puoi farlo con 2 pagine HTML e ottenere il tuo motore per evidenziare le differenze. Fortunatamente esiste già una libreria che fa qualcosa del genere: http://code.google.com/p/daisydiff/ – Husman

+0

Beh, stavo pensando allo stesso modo di raggiungere un elemento e poi applicare alcune regole CSS per evidenziare esso. Sì, ho anche eseguito ** daisydiff ** ma anche alcune eccezioni (puntatore nullo nella sua classe Main). Non capisco perché. È semplicemente troppo complicato. –

0

ok avete la soluzione sempre, solo tranne uno tric. trova il primo id o classe nel testo della patch con una funzione jscript e focalizza l'elemento con jquery.qualcosa di simile:

per tutti i caratteri fino a trovare 'id' var firstIdOfThePatchText = xxx; $ ('# firstIdOfThePatchText') .focus ...

allegria

5

usare Python di difflib. Per esempio:

import difflib 

file1 = open('file1.html', 'r').readlines() 
file2 = open('file2.html', 'r').readlines() 

htmlDiffer = difflib.HtmlDiff() 
htmldiffs = htmlDiffer.make_file(file1, file2) 

with open('comparison.html', 'w') as outfile: 
    outfile.write(htmldiffs) 

Questo creerà un file HTML denominato comparison.html contenente le diff tra i due file html file1.html e file2.html. Qui file1.html è considerata la fonte , o versione originale a seconda di quale è più appropriato per il vostro caso, e file2.html è la cambiato versione o nuova versione, ancora una volta, a seconda di quale è più appropriato qui.

Spero che questo aiuti!

+0

posso salvare il file risultante in formato HTML reso invece del formato sorgente? – Umair

+0

@Umair si puoi. L'output di 'make_file' in' HtmlDiff' * è * reso HTML. Provaci. Nel mio esempio, il file creato si chiama 'comparison.html' –

+0

No caro, salva 'comparison.html' nel formato sorgente HTML ... non è reso HTML ... – Umair

0

Si potrebbe incorporare ogni elemento dalla lista diff in un div di colore in modo che sia facilmente visibile

Lei ha affermato di avere l'elenco delle diff e del prima/dopo i documenti HTML. Se è possibile determinare da quale documento HTML provengono tutti gli elementi differenziali, è possibile visualizzarli per ID nel DOM e incorporarli in un div colorato per renderlo facilmente visibile.