2009-09-21 42 views
16

Cách thuận tiện nhất khi sử dụng Selenium WebDriver để kiểm tra xem URL GET có trả về thành công hay không (HTTP 200)?Làm cách nào để kiểm tra URL cho 404 bằng cách sử dụng Selenium WebDriver?

Trong trường hợp cụ thể này, tôi quan tâm nhất đến việc xác minh rằng không có hình ảnh nào của trang hiện tại bị hỏng.

+0

Không phải tiêu đề của câu hỏi này thực sự là "Làm thế nào để kiểm tra xem URL có tải tất cả hình ảnh trên trang web với Selenium WebDriver không?"? Câu trả lời được chấp nhận không liên quan gì đến các mã phản hồi HTTP và điều này loại trừ một câu hỏi tương tự khi được hỏi. – 0112

+0

Một câu hỏi tương tự (để kiểm tra mã phản hồi) đã được hỏi/trả lời ở đây: http://stackoverflow.com/a/14547168/1596460 – 0112

Trả lời

10

Hãy thử điều này:

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. 
    } 
} 
+3

Tôi cũng cần sử dụng kiểm tra tự nhiênWidth do Dave Hunt đề xuất, vì vậy biểu thức đã tải bây giờ sẽ trở thành: boolean loaded = (Boolean) driver.executeScript ("trả về đối số [0] .complete && typeof đối số [0] .naturalWidth! = \" Undefined \ "&& arguments [0] .naturalWidth> 0", hình ảnh); – paulcm

5

Bạn có thể sử dụng lệnh getEval để xác minh giá trị được trả lại từ JavaScript sau cho mỗi hình ảnh trên trang.

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

Cập nhật:

Added thử nghiệm TestNG/Java ví dụ.

2

Tôi không nghĩ rằng câu trả lời đầu tiên sẽ làm việc. Khi tôi src một hình ảnh sai tên, nó ném một lỗi 404 như mong đợi. Tuy nhiên, khi tôi kiểm tra javascript trong firebug, hình ảnh (bị hỏng) đó có .complete được đặt thành true. Vì vậy, nó là một 404 hoàn thành, nhưng vẫn là một hình ảnh bị hỏng.

Phản hồi thứ hai có vẻ chính xác hơn ở chỗ nó kiểm tra xem nó đã hoàn thành chưa và sau đó kiểm tra xem có một số chiều rộng cho hình ảnh không.

Tôi đã tạo phiên bản python của phản hồi thứ hai phù hợp với mình. Có thể được làm sạch một chút, nhưng hy vọng nó sẽ giúp.

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")) 
0

Một trong các giải pháp thay thế là phân tích nhật ký máy chủ web sau khi thực thi kiểm tra. Cách tiếp cận này cho phép không chỉ bắt hình ảnh bị nhỡ, mà là css, tập lệnh và các tài nguyên khác.

Mô tả cách thực hiện là here.

0

Thay vì duyệt qua trong Java, có thể chỉ gọi javascript nhanh hơn một lần cho tất cả hình ảnh.

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

FUNDA cho kiểm tra 404:

Về cơ bản 404s có thể được kiểm tra thông qua HTTP Response của URL.

Bước 1: Nhập Thư viện cho HTTPTestAPI
Bước 2: Tạo 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 
+0

Câu trả lời này không giải quyết Selenium và thay vào đó sử dụng kết nối HTTP riêng để kiểm tra –

Các vấn đề liên quan