Frage

Was ist der bequemste Weg, Selen WebDriver mit überprüfen, ob eine URL Renditen erfolgreich (HTTP 200)?

In diesem speziellen Fall, dass ich mir am meisten interessiert bei der Überprüfung, dass keine Bilder von der aktuellen Seite gebrochen werden.

War es hilfreich?

Lösung

Versuchen Sie folgendes:

List<WebElement> allImages = driver.findElements(By.tagName("img"));
for (WebElement image : allImages) {
  boolean loaded = ((JavaScriptExecutor) driver).executeScript(
      "return arguments[0].complete", image);
  if (!loaded) {
    // Your error handling here.
  }
}

Andere Tipps

Sie könnten den getEval Befehl, um den Wert zu überprüfen, aus der folgenden JavaScript für jedes Bild auf der Seite zurückgegeben.

@Test
public void checkForBrokenImages() {
    selenium.open("http://www.example.com/");
    int imageCount = selenium.getXpathCount("//img").intValue();
    for (int i = 0; i < imageCount; i++) {
        String currentImage = "this.browserbot.getUserWindow().document.images[" + i + "]";
        assertEquals(selenium.getEval("(!" + currentImage + ".complete) ? false : !(typeof " + currentImage + ".naturalWidth != \"undefined\" && " + currentImage + ".naturalWidth == 0);"), "true", "Broken image: " + selenium.getEval(currentImage + ".src"));
    }
}

Aktualisiert:

Added getestet TestNG / Java-Beispiel.

Ich glaube nicht, dass erste Antwort wird funktionieren. Wenn ich ein Bild misnamed src, wirft es einen 404-Fehler, wie erwartet. Allerdings, wenn ich das Javascript in Firebug zu überprüfen, dass (gebrochen) Bild hat Das Gesamt auf true gesetzt. Also, es wurde 404 a abgeschlossen, aber immer noch ein gebrochenes Bild.

Die zweite Antwort scheint, dass genauer zu sein, es überprüft, ob es vollständig und überprüft dann, dass es eine gewisse Breite auf das Bild ist.

Ich habe eine Python-Version der zweiten Antwort, die für mich funktioniert. Könnte ein wenig aufgeräumt werden, aber es wird hoffentlich helfen.

def checkForBrokenImages(self):
    sel = self.selenium
    imgCount = int(sel.get_xpath_count("//img"))
    for i in range(0,imgCount):
        isComplete = sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].complete")
        self.assertTrue(isComplete, "Bad Img (!complete): "+sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].src"))
        typeOf = sel.get_eval("typeof selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].naturalWidth")
        self.assertTrue(typeOf != 'undefined', "Bad Img (w=undef): "+sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].src"))
        natWidth = int(sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].naturalWidth"))
        self.assertTrue(natWidth > 0, "Bad Img (w=0): "+sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].src"))

Statt in Java zu durchqueren, kann es schneller sein, Javascript zu nennen nur einmal für alle Bilder.

boolean allImgLoaded = (Boolean)((JavascriptExecutor) driver).executeScript(
    "return Array.prototype.slice.call(document.images).every(" 
    + "function (img) {return img.complete && img.naturalWidth > 0;});");

Eine der alternativen Lösungen analysiert Web-Server-Logs nach dem Test ausgeführt wird. Dieser Ansatz ermöglicht es nicht nur verpasst Bilder zu fangen, aber CSS, Skripte und andere Ressourcen.

Beschreibung, wie es zu tun ist, hier .

Funda für die Überprüfung von 404:

Grundsätzlich kann 404s über HTTP-Antwort der URL überprüft werden.

Schritt 1: Importieren Sie die Bibliothek für HTTPTestAPI
Schritt 2:. Erstellen Sie die Httprequest

String URL="www.abc.com";
HTTPRequest request = new HTTPRequest(URL);

//Get the response code of the URL
int response_code = request.getResponseCode();

//Check for 404:
if(response_code == 404)
    FAIL -- THE URL is leading to 404.
else
    PASS
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top