Selenium: Test, ob ein Element komplett im Viewport ist

PS: viewport.intersects(element) würde prüfen, ob das Element mindestens teilweise im Viewport liegt.

Selenium: Testen, ob ein PDF im Browser angezeigt wird

Das ist tatsächlich nicht so trivial, aber der Reihe nach:

Wer danach googelt, findet erstaunlich (?) häufig den Ansatz, die URL auf endsWith(“.pdf”) zu prüfen 😳 Das sagt natürlich nichts darüber, ob das PDF auch dargestellt wird (oder ob es das richtige PDF ist), aber als erste Näherung habe ich das übernommen. Allerdings prüfe ich die URL etwas genauer, und vergleiche sie mit der URL, deren PDF-Ausgabe backendseitig bereits inhaltlich geprüft wird:

Kurz hatte ich dann überlegt, auf den Content Type zu prüfen, aber da kann natürlich alles drin stehen. Die o.g. Bedingungen stellt das ebenfalls nicht sicher.

Dann gibt es Ansätze, STRG+A/STRG+C zu nutzen (Beispiel), um den Inhalt des PDF zu verifizieren – funktioniert nicht mit jedem OS/Browser.

Dann, ebenfalls häufig genannt: PDFBox. Finde ich gut, so kommt man an den Inhalt des PDFs und kann sicherstellen, dass es das richtige PDF ist:

Nachteil: Dass die URL [ein|das richtige] PDF ausliefert, sagt natürlich nichts darüber, dass das im Browser dargestellt wird 🙃

Also: Screenshot machen. Allerdings nicht die Selenium-Methode, denn aus Browser-Sicht ist die Seite “leer”, das PDF wird von einem Plugin gerendert. Die Lösung dazu: Robot.

ACHTUNG: Das geht nicht in einer “headless”-Umgebung, wie man sie bsplw. auf vielen CI-Servern findet:

java.awt.AWTException: headless environment

Mit einem waitFor, bis das PDF tatsächlich gerendert wurde (denn das ist ungleich “die Seite wurde geladen”):

und einem kleinen Trick, um statt des Bildschirms nur den Browserinhalt zu screenshoten:

Auf Basis des Bildes kann man nun sicherstellen, dass keine weiße Seite gerendert wurde…

…oder halt irgendwas. Man könnte auch PNG-Vergleiche machen. Inhaltlich, wie gesagt, würde man mit PDFBox testen, darum ging es hier aber nicht.

HTH.

Ubuntu: Default Verzeichnis für das Speichern von Screenshots

Screenshots macht man per “Druck[en]”-Taste. Anders als bei Windows wird der Screenshot aber in einem Programm geöffnet, in dem man in bearbeiten und speichern kann. Per default speichert das Programm in ~/Pictures, was ich aber nicht möchte. Meine Screenshots sind fast immer temporär, etzwas für Emails. Deshalb möchte ich den default auf den Desktop legen:

Spring: /resources durchsuchen

Problem: Wie kann ich einen resources-Ordner durchsuchen – in der IDE, im .jar und aus jUnit-Test heraus1?

Lösung: PathMatchingResourcePatternResolver.getResources(String locationPattern)

Beispiel:

von, via

1Wo getClass().getResource(MY_FOLDER + "someFile.def"); funktioniert, aber getClass().getResource(MY_FOLDER); nicht2.

2wtf.

Internet Explorer: “Protected Mode” Registry Key

Wer bsplw. Selenium gegen den IE fährt, der wird auf den “Protected Mode” stoßen, doch wer den per Skript setzen will, der muss schon etwas länger suchen: In der Registry gibt es einen entsprechenden Schlüssel “2500” (“Turn on Protected Mode”).

Dazu:

Unless stated otherwise, each DWORD value is equal to zero, one, or three. Typically, a setting of zero sets a specific action as permitted, a setting of one causes a prompt to appear, and a setting of three prohibits the specific action.

In Code sieht das dann so aus:

Danke, Johann!

EDIT: Scheint nicht (persistent) zu funktionieren. Ein Workaround scheint

zu sein, und dies könnte man auch probieren:

For IE 11 only, you will need to set a registry entry on the target computer so that the driver can maintain a connection to the instance of Internet Explorer it creates.

For 32-bit Windows installations, the key you must examine in the registry editor is HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE.

For 64-bit Windows installations, the key is HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE.

Please note that the FEATURE_BFCACHE subkey may or may not be present, and should be created if it is not present.

Important: Inside this key, create a DWORD value named iexplore.exe with the value of 0.

Ubuntu: Indicator entfernen

Die Leute sagen, das Mail-Icon könne man mit einem “Blacklist”-Verzeichnis entfernen ([1], [2]), das hat bei mir unter 14.04 aber nichts gebracht. Stattdessen half:

via, und.

Das “Language”/Keyboard-Icon wird man in den Einstellungen los: System Settings -> Text Entry -> “Show current input source in the menu bar”. Via

To be continued.

Spring: JSON aus HttpServletRequest

Vorab: Ja, es gibt @RequestBody. Und es ist hässlich. Ich habe es nicht mal eingebaut. Aber ich musste es googlen und will das nicht noch mal tun müssen:

PS zu Zeile 2 und zu Zeile 4.

Spotify läuft nicht hinter Firmen-Proxy?

Ergänzend zur Anleitung für play.spotify.com: Bei wirklich hartnäckigen Proxys (und unter Ubuntu) hilft es, die App* statt der Weboberfläche zu nutzen:

  1. Spotify beenden, ggf. vorher ausloggen (aber wenn Du eingeloggt bist, liest Du vermutlich diese Anleitung nicht)
  2. Netzwerk trennen/deaktivieren
  3. Spotify starten, mit irgendwelchen Daten versuchen, sich einzuloggen
  4. Spotify meldet einen Fehler und bietet das editieren der Proxy-Settings an
  5. Daten eingeben, bestätigen.

Quelle, und, wobei manuelles Editieren der Config bei mir nicht geklappt hat.

*Installation unter Ubuntu