使用Selenium WebDriver检查URL GET是否成功返回(HTTP 200)最方便的方法是什么?
在这种特殊情况下,我最感兴趣的是验证当前页面没有图像被破坏。
答案 0 :(得分: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.
}
}
答案 1 :(得分: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示例。
答案 2 :(得分: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"))
答案 3 :(得分:0)
其中一种替代解决方案是在测试执行后分析Web服务器日志。这种方法不仅可以捕获错过的图像,还可以捕获css,脚本和其他资源。
如何执行此操作的说明是here。
答案 4 :(得分:0)
不是在Java中遍历,而是为所有图像调用一次javascript可能会更快。
boolean allImgLoaded = (Boolean)((JavascriptExecutor) driver).executeScript(
"return Array.prototype.slice.call(document.images).every("
+ "function (img) {return img.complete && img.naturalWidth > 0;});");
答案 5 :(得分:-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