我使用intern.js來測試一個web應用程序。我可以在失敗時執行測試並創建屏幕截圖。我想爲特定元素創建屏幕截圖,以便使用resemble.js等工具進行CSS迴歸測試。可能嗎?我能怎麼做?謝謝!如何使用實習生js截取DOM元素?
0
A
回答
0
driver.get("http://www.google.com");
WebElement ele = driver.findElement(By.id("hplogo"));
//Get entire page screenshot
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage fullImg = ImageIO.read(screenshot);
//Get the location of element on the page
Point point = ele.getLocation();
//Get width and height of the element
int eleWidth = ele.getSize().getWidth();
int eleHeight = ele.getSize().getHeight();
//Crop the entire page screenshot to get only element screenshot
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth,
eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
//Copy the element screenshot to disk
File screenshotLocation = new File("C:\\images\\GoogleLogo_screenshot.png");
FileUtils.copyFile(screen, screenshotLocation);
摘自here。
1
有沒有內置的方式來與Intern做到這一點。 takeScreenshot
方法只需調用Selenium的屏幕截圖服務,該服務將整個頁面的屏幕截圖作爲base-64編碼的PNG返回。在將結果交給用戶之前,實習生的takeScreenshot
將其轉換爲節點緩衝區。
要裁剪圖像,您需要使用外部庫或工具,例如png-crop(請注意,我從來沒有使用過)。該代碼可能看起來像下面(未經測試):
var image;
var size;
var position;
return this.remote
// ...
.takeScreenshot()
.then(function (imageBuffer) {
image = imageBuffer;
})
.findById('element')
.getSize()
.then(function (elementSize) {
size = elementSize;
})
.getPosition()
.then(function (elementPosition) {
position = elementPosition;
})
.then(function() {
// assuming you've loaded png-crop as PNGCrop
var config = {
width: size.width,
height: size.height,
top: position.y,
left: position.x
};
// need to return a Promise since PNGCrop.crop is an async method
return new Promise(function (resolve, reject) {
PNGCrop.crop(image, 'cropped.png', config, function (err) {
if (err) {
reject(err);
}
else {
resolve();
}
});
});
})
相關問題
- 1. 如何避免DOM元素使用JS
- 2. 如何單擊並利用影子DOM鍵入元素實習生
- 3. 如何使用實習生js導入外部圖書館?
- 4. 如何使用d3.js添加嵌套的svg元素到dom
- 5. 你可以使用JS訪問元素的DOM子元素嗎?
- 6. 暴露DOM元素與JS
- 7. 訪問DOM元素JS
- 8. 如何在AngularJS中生成DOM元素?
- 9. 如何從DOM元素獲取Ext JS組件
- 10. Raphael JS:如何從Dom對象(Element.node)獲取Raphael元素?
- 11. 使用DOM元素
- 12. 如何使用chrome-remote-interface節點js獲取多個DOM元素?
- 13. Javascript最佳實踐 - 在DOM中隱藏元素或生成DOM元素
- 14. 獲取DOM元素
- 15. 如何使用jQuery添加DOM元素?
- 16. 如何使用HTML DOM去除元素?
- 17. 如何使用AngularJS監聽DOM元素?
- 18. 如何使用backbone.js緩存DOM元素?
- 19. 引用JS對象到DOM元素
- 20. 使用jQuery獲取DOM元素名稱
- 21. 無法使用JavaScript獲取DOM元素
- 22. 獲取DOM元素使用jQuery
- 23. 使用PHP獲取DOM元素
- 24. 如何註釋掉一個XML元素(使用minidom DOM實現)
- 25. 如何產生實習生JS HTML報告
- 26. 如何使用dojo獲取dom元素的所有屬性
- 27. 如何使用Javascript獲取已刪除的DOM元素?
- 28. 如何使用jquery在頁面中獲取dom元素值
- 29. 如何使用_this_ Jeditable獲取操縱dom元素的值?
- 30. 如何從iframe中獲取dom元素使用php
謝謝,我會使用像WebdriverCSS這樣能夠做我需要的東西。 – scosmaa
有趣的是,我沒有看到WebDriverCSS。我們實際上正在爲Intern開發一個可視化迴歸測試更新,所以這種類型的操作在未來可能會變得更容易一些。 – jason0x43
如何導入實驗室測試模塊中的node.js模塊(PNGCrop)? – Shrike