代码之家  ›  专栏  ›  技术社区  ›  stpe

如何使用Selenium WebDriver检查404的URL?

  •  16
  • stpe  · 技术社区  · 15 年前

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

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

    6 回复  |  直到 10 年前
        1
  •  10
  •   Simon Stewart    15 年前

    试试这个:

    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.
      }
    }
    
        2
  •  5
  •   Dave Hunt    15 年前

    您可以使用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实例。

        3
  •  2
  •   user229053    14 年前

    我认为第一种反应不会奏效。当我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"))
    
        4
  •  0
  •   Yauheni Sivukha    14 年前

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

    如何做的描述是 here .

        5
  •  0
  •   afx    11 年前

    代替在Java中遍历,对所有图像只调用一次JavaScript可能更快。

    boolean allImgLoaded = (Boolean)((JavascriptExecutor) driver).executeScript(
        "return Array.prototype.slice.call(document.images).every(" 
        + "function (img) {return img.complete && img.naturalWidth > 0;});");
    
        6
  •  -1
  •   Andrew Barber Mike Nilson    10 年前

    检查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