Как проверить URL на 404 Селена использования WebDriver?

Проверьте ответ "Devin Jeanpierre" на этот вопрос sort-a-dictionary-in-python-by-the-value, где он говорит для использования кортежа и шоу, как отсортировать по второму значению

16
задан stpe 21 September 2009 в 09:04
поделиться

4 ответа

Попробуйте следующее:

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.
  }
}
10
ответ дан 30 November 2019 в 22:37
поделиться

You could use the getEval command to verify the value returned from the following JavaScript for each image on the page.

@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"));
    }
}

Updated:

Added tested TestNG/Java example.

5
ответ дан 30 November 2019 в 22:37
поделиться

I don't think that first response will work. When I src a misnamed image, it throws a 404 error as expected. However, when I check the javascript in firebug, that (broken) image has .complete set to true. So, it was a completed 404, but still a broken image.

The second response seems to be more accurate in that it checks that it's complete and then checks that there is some width to the image.

I made a python version of the second response that works for me. Could be cleaned up a bit, but hopefully it will help.

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"))
2
ответ дан 30 November 2019 в 22:37
поделиться

Одним из альтернативных решений является анализ журналов веб-сервера после выполнения теста. Такой подход позволяет ловить не только пропущенные изображения, но и css, скрипты и другие ресурсы.

Описание того, как это сделать, находится здесь .

0
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: