2010-10-29 12 views

Antwort

18

Ich konfrontiert diese ähnliche Situation vor, wo die Quelle des Bildes wie erwartet ist, aber das Bild nicht auf der Seite angezeigt wird.

Sie können überprüfen, ob das Bild angezeigt wird oder nicht, indem Sie den JavaScriptExcutor verwenden.

den folgenden Code verwenden - Übergeben Sie die WebElement (Bild) -

Object result = ((JavascriptExecutor) driver).executeScript(
    "return arguments[0].complete && "+ 
    "typeof arguments[0].naturalWidth != \"undefined\" && "+ 
    "arguments[0].naturalWidth > 0", image); 

    boolean loaded = false; 
    if (result instanceof Boolean) { 
     loaded = (Boolean) result; 
     System.out.println(loaded); 
    } 

Sie können überprüfen, ob das Bild tatsächlich auf der Webseite, indem Sie diese geladen ist.

+1

Danke, ich habe nicht erwartet, dass jemand nach diesen vielen Monaten eine funktionierende Lösung schreiben würde. Ich habe diesen Code verwendet, um zu überprüfen, ob alle Bilder auf der Seite vorhanden sind: 'var elems = document.getElementsByTagName (" img "); var allOk = wahr; für (var i = 0; i 0; Konsole. log (elems [i] .naturalWidth);} allOk; '. –

+0

Ihre Begrüßung. Freut mich, dass es dein Problem gelöst hat. –

+0

Gute Arbeit! Eine Anmerkung: Unsere Entwickler haben ein Platzhalterbild, das 400px groß ist, und sie tauschen es mit dem Bild mit Lazy Loaded aus, wenn Sie zu diesem Bild blättern. Also ist der letzte Test für mich "Argumente [0] .naturalWidth! = 400". Erkundige dich bei deinen Entwicklern nach Hilfe. – SiKing

0

Sie können sicher überprüfen, dass das Bild in der Seitenquelle z. mit einem XPath-Parameter.

Sie können davon ausgehen, dass, weil es in der Seitenquelle ist, es angezeigt wird, aber ich weiß keine Möglichkeit, dies tatsächlich zu überprüfen.

+0

Es gibt Situation, wenn die Galerieseite in Ordnung erzeugt wird, aber das Bild selbst ist ungültig - zum Beispiel wegen einer Ausnahme im Bildskript. –

1

Wenn Sie bereit sind, das TestPlan Frontend zu Selenium zu verwenden, gibt es ein paar Optionen. Sobald Sie die URL des Bildes haben, können Sie diese URL abrufen und die zurückgegebenen Header überprüfen. Sie können die Daten auch in einer Datei speichern, wenn Sie sie manuell überprüfen möchten. Oder Sie schreiben einen Validator in Java, um diese Daten zu übernehmen und zu überprüfen, ob sie tatsächlich dekodiert werden.

Wenn Sie bereit sind, es auszuprobieren, schreibe ich Ihnen ein Beispielskript. Ich kann sogar eine schnelle Bildvalidierungsfunktion ausführen, wenn Sie möchten.

+0

Diese Software sieht interessant aus, aber ich bin verpflichtet, Bromfrontend zu verwenden. Unsere Firma hat bereits einige Arbeitsstunden damit verbracht, sie anzupassen und diese Arbeit zu verschwenden, nur weil die Bildprüfung nicht durchführbar ist. Danke für den Tipp. –

2

Wenn Sie Java verwenden, hat Selen eine Methode mit dem Namen eval oder so. Sie geben ihm eine JavaScript-Zeichenfolge und es gibt Ihnen das Ergebnis als Zeichenfolge. Zum Beispiel könnten Sie diese (in einer Zeile) versuchen:

var req = new XMLHttpRequest(); 
req.open('get', document.getElementById('imageid').src, false); 
req.send(null); 
req.status==200 

Dies sollte „true“ für den Status 200 oder „false“ für etwas anderes zurück.

+0

Was tun, wenn das Bild keine ID hat? Das Bild hat Name und Klasse - Was tun in diesem Fall? –