wpforge
Goto Top

Testautomatisierung

Hallo,
nehmen wir an, es gibt eine Webseite mit einer Karte und einem Suchfeld.
Nun wird in das Suchfeld eine Adresse eingegeben und es erscheint ein Pin auf der Karte.
Beim Klick auf diesen Pin wird nun im Hintergrund eine json Datei nachgeladen.

Und genau diesen Inhalt hätte ich gern.

Das Hauptproblem hier ist vermutlich, dass die eingesetzte Software den "Pin" erkennen müsste.

Mein weg wäre jetzt, dass die Testsoftware einen Screenshot erstellt und der Pin über eine Bilderkennung gefunden wird und die Testsoftware dann die Koordinaten bekommt, wo zu klicken ist.

Das ist aber ein langer und aufwändiger Weg.
Ich würde jetzt hier hoffen, dass sich da etwas finden lässt, das einfacher geht.

Habt Ihr dazu Vorschläge?

Danke schon mal für eure Antworten

Content-ID: 392808

Url: https://administrator.de/contentid/392808

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

129580
129580 14.11.2018 aktualisiert um 18:19:33 Uhr
Goto Top
Hallo,

was soll sich den innerhalb der JSON Datei befinden?
Adressdaten, Koordinaten...? Wenn ja, dann geht das doch deutlich einfacher.

Viele Grüße,
Exception
WPFORGE
WPFORGE 14.11.2018 um 20:06:42 Uhr
Goto Top
Innerhalb der json Datei befindet sich ein Parameter, der aber so auf der Seite nicht dargestellt wird.
BassFishFox
BassFishFox 14.11.2018 um 20:40:36 Uhr
Goto Top
Hi,

Woher sollen denn die Koordinaten kommen, wenn die "Testsoftware" auf einen Bild ein paar Pixel (den Pin) erkennt?

Kannst Du mal genauer erklaeren, welche Karte Du meinst? Weil mit Pin nach Suche erinnert mich fuerchterlich an Google Earth.

Bei Nutzung von GE war es vor Jahren moeglich die Suche und Klicks (Koordinaten) in den Karten aus dem Traffic zu den Googleservern per Wireshart mitzuschnorcheln. Das Log unseres Proxy's war auch sehr hilfreich. Ob das heute noch so ist, keine Ahnung. Hab mich seit Jahren nicht mehr damit beschaeftigt.

BFF
WPFORGE
WPFORGE 14.11.2018 um 20:53:35 Uhr
Goto Top
Es könnte sich hier zum Beispiel um wohnlagenkarte.de handeln.
Gibt man eine Adresse im Suchfeld ein und sendet ab, erscheint eine Karte mit einem Pin drauf.
Klickt man nun auf den Pin, wird ein POST request ausgelöst, der eine Datei "wohnlagen-poly" nachlädt.
Das kann man im Network Tab der DeveloperTools von Chrome gut sehen.
Und genau den Inhalt dieser Datei hätte ich furchtbar gern.
Alternativ würde es mir auch reichen, wenn ich die Parameter de Postrequest abfangen könnte.
SeaStorm
SeaStorm 14.11.2018 aktualisiert um 21:37:25 Uhr
Goto Top
Oh man ... ich bin erst mal davon ausgegangen, das da eine PIN im Sinne eines Sicherheits-Code Captchas erscheint ...
Du musst doch nur den gleichen POST Request auslösen mit den entsprechenden Werten, dann bekommst du den Inhalt.
Bei mir kommt in dem Fall zwar ein 404, wenn ich auf den Marker klicke, aber das liegt sicher an anderen Dingen. Grundsätzlich schickt das Ding einfach nur die Koordinaten an die Poly Datei
poly
WPFORGE
WPFORGE 14.11.2018 aktualisiert um 22:36:43 Uhr
Goto Top
Das ist gut erkannt.... ich will genau diese Daten ;)
Aber ich möchte die automatisiert bekommen.
Ich bin schon soweit, dass Selenium für mich klickt...
Ich sehe nur nicht, wie ich an diese beiden Parameter komme.
stefaan
stefaan 14.11.2018, aktualisiert am 15.11.2018 um 00:39:06 Uhr
Goto Top
Servus,

Ich gehe einmal davon aus, dass du mehr als 2-3 Adressen auswerten willst und das manuell keinen Spaß machen würde.

Ein schneller Test mit Insomnia: Das Webservice gibt einfach mit der Angabe von Koordinaten die Wohnlage mit dem Polygon aus. (Kurfürstendamm Berlin, als Nichtdeutscher war das mein erster Konnex zu teurem Pflaster durch DKT aus Kindheitstagen)

wonlagenkarte

Die Koordinaten stammen aus der Openstreetmap (die ja die Basis für die Karte ist).

Das schreit nach einem kleinen Python-Skript mit requests und beautifulsoap:
-) Aus deiner Listen/DB Adressen auslesen
-) Adressen per Openstreetmap in Koordinaten umwandeln lassen
-) Koordinaten per wohnlagen-poly die Lage checken
-) Ergebnis wieder in die Liste zur Adresse schreiben
-) Das am besten mit kurzen Pausen und über Proxies/VPN, damit das nicht soo auffällt.

Möglich ist das, ob erwünscht oder erlaubt ist ein anderes Thema...

Grüße, Stefan
137846
137846 15.11.2018 aktualisiert um 09:38:53 Uhr
Goto Top
Lässt sich doch leicht mit Powershell auslesen, die Daten von der Seite kommen aus Openstreetmap per JSON:
$ort = 'Hamburg'  
$result = irm "https://nominatim.openstreetmap.org/search?q=$ort&format=json" -Method Get | select Display_name,lat,lon  
$result
Und so hast du die Eigenschaften direkt als Properties frei Haus.

A.
WPFORGE
WPFORGE 15.11.2018 um 10:05:38 Uhr
Goto Top
Wenn du dir das json der "wohnraum-poly" mal ansiehst:
{"id":36645,"name":null,"kgs18":null,"wohnlage":2,"poly":{"type":"MultiPolygon","coordinates":[[[[8.98968450000007,54.4011703],[8.98939270000005,54.4008005000001],[8.98937550000005,54.4007406000001],[8.98939270000005,54.4006906000001],[8.98948710000008,54.4006356],[8.98969310000007,54.4005857000001]....

Gibt es da einen Parameter "wohnlage"
Der kommt nicht aus osm. Und ausgerechnet genau DAS brauche ich.
137846
137846 15.11.2018 aktualisiert um 10:14:21 Uhr
Goto Top
Ist kein Thema einfach die Koordinaten die du oben erhalten hast per POST an die Adresse schicken..., aber hier kommt da leider nur ein Status 404 beim drauf klicken.
WPFORGE
WPFORGE 15.11.2018 um 10:16:41 Uhr
Goto Top
Auch hier ist es leider nicht so einfach.
Wenn du dir den Postrequest ansiehst, sind die Koordinaten in der Anfrage sehr viel präziser (15 Nachkommastellen), als die Koordinaten die in dem json zurück kommen.
Ich brauche tatsächlich eine Möglichkeit, entweder diesen POST request zu fange, dass ich die Parameter habe, oder die nachgeladene wohnraumpoly auszulesen.
137846
Lösung 137846 15.11.2018 aktualisiert um 11:51:51 Uhr
Goto Top
$ort = Read-Host 'Bitte exakte Adresse eingeben (am besten mit Straße und Hausnummer) '  
$result = (irm "https://nominatim.openstreetmap.org/search?q=$ort&format=json") | select -First 1  
if ($result){
    write-host "Ergebnis für $($result.display_name)" -F Green  
    try{
        $wl = irm 'https://www.wohnlagenkarte.de/wohnlagen-poly' -Body (@{latitude=$result.lat;longitude=$result.lon} | ConvertTo-Json -Depth 100) -Method Post -ContentType 'application/json' -ea Stop  
        $map = @{1="Einfache Wohnlage";2="Mittlere Wohnlage";3="Gute Wohnlage";4="Sehr gute Wohnlage";5="Top Wohnlage"}  
        write-host "Die Gegend ist eingestuft als '$($map[$wl.wohnlage])'" -F Yellow  
    }catch{
        write-host 'Wohnlage nicht gefunden, oder keine Bewertung für Standort vorhanden.' -F Red  
    }
}else{
    write-host "Position nicht gefunden." -F Red  
}
Passt hier perfekt, und wertet dir bereits die Wohnlage als Text aus.
Beispiel für Suchort: Stuttgart, Bahnhofstr. 11

p.s. Suuuuper ist der Schreibfehler des Longtitude Parameters face-wink longitude, da fehlt eigentlich das t, da stolpert man beim Testen leicht drüber und fragt sich warums nicht geht.
stefaan
stefaan 15.11.2018 aktualisiert um 11:38:02 Uhr
Goto Top
Servus,

bei 5 Nachkommastellen hast du bereits eine Genauigkeit von ca. 1m.

Vgl. https://wiki.openstreetmap.org/wiki/DE:Genauigkeit_von_Koordinaten

Bei 15 Nachkommastellen bist du im Bereich 10^-10m und kannst die Wohnlage zwischen Atomkern und Elektron angeben. Die schwarzen Schafe aus der Immobilienbranche würden das sicher mit "beste Lage, ruhig, unverbaut" unters Volk bringen wollen...

In Python wärs auch nicht viel länger als mit PS, mein Hinweis zum Paket "beautifulsoap" stammt aus einem anderen Projekt, dort wurden Tags aus div. Seiten extrahiert. Das ist hier nicht notwendig. Kollege Answer hat dir ja fast schon die ganze Arbeit abgenommen.

Grüße, Stefan
WPFORGE
WPFORGE 15.11.2018 um 15:04:28 Uhr
Goto Top
Das Script läuft super ;)
Vielen Dank.
Jetzt versuche ich das gerade nach PHP umzusetzen.

Und wie ich das sehe, sollte
$wl = irm 'https://www.wohnlagenkarte.de/wohnlagen-poly' -Body (@{latitude=$result.lat;longitude=$result.lon} | ConvertTo-Json -Depth 100) -Method Post -ContentType 'application/json' -ea Stop   

eigentlich dem entsprechen:
$data = array("latitude" => $arr['lat'], "longitude" => $arr['lon']);                                                                      
        $data_string = json_encode($data);                                                                                   
        echo $data_string;                                                                                                            
        $ch = curl_init('https://www.wohnlagenkarte.de/wohnlagen-poly');                                                                        
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                       
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
            'Content-Type: application/json',                                                                                  
            'Content-Length: ' . strlen($data_string))                                                                         
        );                                                                                                                   
                                                                                                                     
        $result = curl_exec($ch);

$result ist aber leer.

Hat dazu noch einer eine Idee?
137846
137846 15.11.2018 aktualisiert um 15:53:05 Uhr
Goto Top
PHP und dann in der Kategorie Java posten, warum nicht gleich in PHP??

Geht hier problemlos. Hast verm. Koordinaten verwendet die eben kein Ergebnis liefern dann kommt nämlich nix zurück, oder kein curl installiert. PHP Fehlerausgabe aktivieren ...
WPFORGE
WPFORGE 16.11.2018 um 11:30:39 Uhr
Goto Top
Ich hatte gehofft, dass ich dann nicht alles nochmal erklären muss.
Aber nein am Suchstring liegts nicht. der Gleiche Suchstring liefert über das PS Script Ergebnisse.