51Testing软件测试论坛
标题:
Selenium WebDriver如何实现区部截图(JAVA语言)
[打印本页]
作者:
kavensyw
时间:
2014-7-4 22:46
标题:
Selenium WebDriver如何实现区部截图(JAVA语言)
我需要进行验证码识别(JAVA语言):
1、截取登录页面的验证码图片;
2、使用tesseract-OCR进行识别
其中第2步我已经单独测试成功,但如何截取验证码区域的图片呢?
这个语句用于整个页面的截图。 局部截图如何处理??
File screenShotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE );
[attach]90946[/attach]
作者:
kavensyw
时间:
2014-7-5 10:53
本帖最后由 kavensyw 于 2014-7-5 11:18 编辑
自己搞定:
//import org.openqa.selenium.JavascriptExecutor;
JavascriptExecutor jse = (JavascriptExecutor)driver;
//获取验证码的绝对坐标、宽度、高度
Long xValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect(); " +
"return oRect.left+window.screenLeft + document.documentElement.scrollLeft - document.documentElement.clientLeft;");
Long yValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect(); " +
"return oRect.top+ window.screenTop + document.documentElement.scrollTop - document.documentElement.clientTop;");
Double width = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect(); return oRect.width;");
Double height = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect(); return oRect.height;");
Thread.sleep(3000);
//使用Robot截图
BtiCommon.captureScreen("Test111"
,Integer.parseInt(String.valueOf(xValue))
,Integer.parseInt(String.valueOf(yValue))
,Integer.parseInt(new java.text.DecimalFormat("0").format(width))
,Integer.parseInt(new java.text.DecimalFormat("0").format(height))
);
复制代码
import java.awt.image.BufferedImage;
import java.awt.Robot;
import java.awt.Rectangle;
import java.io.FileOutputStream;
import com.sun.image.codec.jpeg.*;
public static void captureScreen(String screenName, int x, int y,
int width, int height) {
try {
BufferedImage capture = null;
Rectangle area = new Rectangle(x, y, width, height);
Robot robot = new Robot();
capture = robot.createScreenCapture(area);
String fn = "E:\\" + screenName + ".jpg";
FileOutputStream out = new FileOutputStream(fn);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(capture);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
复制代码
作者:
ripple_wang
时间:
2014-7-11 11:08
不错,标记下
作者:
黑羽祭
时间:
2014-7-12 17:18
顶
作者:
yrenyi0603
时间:
2014-7-19 08:54
这样做浏览器不能最小化吧?
作者:
hcface
时间:
2014-8-1 09:30
看来用SE做自动化确实比较复杂啊。。
作者:
hcface
时间:
2014-8-1 09:30
脚本后期怎么维护呢。。。
作者:
yiran163
时间:
2018-5-8 17:25
为什么我截取验证码的位置老是出错呢
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2