5 / 117
Worum geht's?
• 2 Folien Einführung
• Drei alte bekannte Gegenmaßnahmen
• Neue innovative Gegenmaßnahmen
6 / 117
Idee #1
Layout-Fehler vermeiden,
indem man immer
valides HTML ausliefert.
7 / 117
Wie?
• HTML während des Builds überprüfen
– Funktioniert nicht für dynamisch
erzeugtes HTML.
8 / 117
Wie?
• Browser Extension
– (Funktioniert nur in einem Browser.)
– (Muss manuell getriggert werden.)
– Läßt den CI-Build nicht fehlschlagen.
9 / 117
Wie?
• Automatische HTML-Validierung
als Bestandteil des CI-Builds
– Option 1: Ein separater Test, der die
entscheidenen Seiten Ihrer Website
überprüft.
– Option2: Innerhalb bereits existierender
Frontend-Tests
15 / 117
Schnelleres Feedback möglich!
• Mit einem javax.servlet.Filter
– Voraussetzung: HTML-Entwickler
benutzt Tomcat oder Jetty
– Funktioniert in allen Browsern
17 / 117
How it works:
– Inside the doFilter method:
responseWrapper = new TeeHttpServletResponse(response);
filterChain.doFilter(request, responseWrapper);
– The TeeHttpServletReponse writes the reponse
a) immediatly back to the browser and
b) into an internal buffer.
– After doFilter returns, the HTML is fetched from,
the buffer and send to the W3C Markup Validation
Service.
– A small JavaScript snippet is appended to the
response (after the closing </html> tag), which
displays either a green or a red box, depending on
the validation result.
23 / 117
Ads
• Müssen Sie invalides HTML von externen
Quellen in Ihre Seiten einbinden?
• Option 1: Fügen Sie einen Switch zum
Ausschalten aller Ads zu Ihrer Web-
applikation hinzu.
• Option 2: Erweitern Sie den
W3CMarkupValidationFilter so, dass er
vor der Validierung alle Ads entfernt.
25 / 117
Idee #2
Layout-Fehler vermeiden,
indem man immer
valides CSS ausliefert.
26 / 117
Wie?
• CSS während des Builds überprüfen
– CSS ist nicht nur in *.css-Dateien,
sondern auch in HTML-Templates in
<style>-Elementen und/oder style-
Attributen.
– Trotzdem:
Nur eine Teilmenge des CSS
zu überprüfen ist besser als
gar kein CSS zu überprüfen.
27 / 117
Wie?
• Browser Extension
– (Funktioniert nur in einem Browser.)
– (Muss manuell getriggert werden.)
– Läßt den CI-Build nicht fehlschlagen.
28 / 117
Wie?
• Automatische CSS-Validierung
als Bestandteil des CI-Builds
– Option 1: Ein separater Test, der die
entscheidenen Seiten Ihrer Website
überprüft.
– Option2: Innerhalb bereits existierender
Frontend-Tests
33 / 117
Schnelleres Feedback möglich!
• Mit einem javax.servlet.Filter
– Voraussetzung: HTML-Entwickler
benutzt Tomcat oder Jetty
– Funktioniert in allen Browsern
36 / 117
Idee #3
Layout-Fehler vermeiden,
indem man auf gültige
Bild-URLs überprüft.
37 / 117
http://fighting-layout-bugs.googlecode.com
DetectInvalidImageUrls
• Überprüft HTML auf sichtbare
<img>- Elemente ohne oder mit
ungültigen src-Attribut
• Überprüft CSS (style-Attribute,
<style>-Elemente, eingebundene
Stylesheets) auf ungültige Bild-URLs
• Überprüft die URL für das Favicon
57 / 117
http://fighting-layout-bugs.googlecode.com
SimpleTextDetector
• jQuery wird in die zu analysierende Seite injected
• jQuery('*').css('color', '#000000');
• ein Screenshot wird erstellt
• jQuery('*').css('color', '#fffff');
• es wird ein zweiter Screenshot erstellt
• Vergleich beider Screenshots:
unterschiedliche Pixel sind Textpixel
62 / 117
http://fighting-layout-bugs.googlecode.com
SimpleEdgeDetector
• jQuery wird in die zu analysierende Seite injected
• jQuery('*').css('color', 'transparent');
• ein Screenshot wird erstellt
• Bestimmen der Kandidaten für vertikale / horizontale
Kanten: alle Pixelpaare mit hohem Kontrast
• Bestimmen der vertikale / horizontale Kanten:
alle vertikalen / horizontalen Sequenzen in den
gefundenen Kandidaten mit ähnlicher Farbe und
einer gewissen Mindestlänge
69 / 117
http://fighting-layout-bugs.googlecode.com
DetectTextWithTooLowContrast
• Textpixel identifizieren (wie bereits gesehen)
• Überprüfen, ob Kontrast zwischen Textpixeln
und Hintergrundpixeln groß genug ist
71 / 117
http://fighting-layout-bugs.googlecode.com/
• Wird bereits eingesetzt bei
AOL, eBay, Google, und Yahoo
• Soll(te) mal so etwas wie FindBugs werden:
– FindBugs: typische Programmierfehler
in Java-Klassen finden
– FLB: typische Layoutfehler
in Webseiten finden
• Freue mich über jede Form
von Feedback und/oder Mitarbeit
72 / 117
Integration in den
Entwicklungsprozess
• Nigthly Build
• Option 1: separater Frontend-Test,
der verschiedene wohldefinierte
Seiten untersucht
• Option 2: An ausgewählten Punkten
in bereits bestehenden Frontend-Tests
73 / 117
Fehlerhafte Texterkennung
durch Animation auf der
zu analysierenden Seite ...
108 / 117
Idee #8
Layout-Fehler vermeiden,
indem man aus Designvorlagen
automatische Akzeptanztests ableitet.
109 / 117
Beispiele
• Ist das Logo / die Hauptnavigation
auf jeder Seite an der gleichen Stelle?
• Läuft Text über die Spalten des für die
Seite definierten Grids hinaus?
• Wird an irgendeiner Stelle ein falscher
Font benutzt?
110 / 117
Lange Rede, kurzer Sinn:
• Layout-Fehler können mittels
automatischer Tests bekämpft werden:
– HTML validieren
– CSS validieren
– Common Detectors von FLB einsetzen
– Automatische Tests für erkannte
Layout-Fehler / Designvorlagen schreiben
112 / 117
One more thing ...
Usability-Fehler
durch automatische Tests erkennen.
113 / 117
Beispiele
• Man kann einem grafischen Button nicht
ansehen, ob er den Fokus hat.
• Ein Button kann nicht via Tabulator-
Taste erreicht werden
• Unerwartete Fokus-Reihenfolge beim
Elementwechsel via Tabulator-Taste