18

使用 Selenium WebDriver 检查 URL GET 是否成功返回(HTTP 200)最方便的方法是什么?

在这种特殊情况下,我最感兴趣的是验证当前页面的图像是否损坏。

4

6 回答 6

10

试试这个:

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.
  }
}
于 2009-09-21T14:19:24.973 回答
5

您可以使用 getEval 命令来验证页面上每个图像从以下 JavaScript 返回的值。

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

更新:

添加了经过测试的 TestNG/Java 示例。

于 2009-09-21T09:38:03.490 回答
2

我不认为第一反应会奏效。当我 src 错误命名的图像时,它会按预期抛出 404 错误。但是,当我在 firebug 中检查 javascript 时,该(损坏的)图像已将 .complete 设置为 true。所以,这是一个完整的 404,但仍然是一个损坏的图像。

第二个响应似乎更准确,因为它检查它是否完整,然后检查图像是否有一些宽度。

我制作了对我有用的第二个响应的 python 版本。可以清理一下,但希望它会有所帮助。

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"))
于 2009-12-10T18:43:51.347 回答
1

与其在 Java 中遍历,不如为所有图像只调用一次 javascript 可能会更快。

boolean allImgLoaded = (Boolean)((JavascriptExecutor) driver).executeScript(
    "return Array.prototype.slice.call(document.images).every(" 
    + "function (img) {return img.complete && img.naturalWidth > 0;});");
于 2012-11-23T15:21:18.927 回答
0

替代解决方案之一是在测试执行后分析 Web 服务器日志。这种方法不仅可以捕获丢失的图像,还可以捕获 css、脚本和其他资源。

如何做到这一点的描述是here

于 2010-06-16T10:19:56.113 回答
-1

检查404的基础:

基本上可以通过 URL 的 HTTP 响应来检查 404。

第 1 步:为 HTTPTestAPI 导入库
第 2 步:创建 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
于 2014-04-02T07:17:01.060 回答