51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 8967|回复: 7
打印 上一主题 下一主题

Selenium WebDriver如何实现区部截图(JAVA语言)

[复制链接]
  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2014-7-4 22:46:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我需要进行验证码识别(JAVA语言):

    1、截取登录页面的验证码图片;
    2、使用tesseract-OCR进行识别

    其中第2步我已经单独测试成功,但如何截取验证码区域的图片呢?

    这个语句用于整个页面的截图。 局部截图如何处理??
    File screenShotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE );

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    2#
     楼主| 发表于 2014-7-5 10:53:34 | 只看该作者
    本帖最后由 kavensyw 于 2014-7-5 11:18 编辑

    自己搞定:

    1.   //import org.openqa.selenium.JavascriptExecutor;
    2.    JavascriptExecutor jse = (JavascriptExecutor)driver;

    3.    //获取验证码的绝对坐标、宽度、高度
    4.    Long xValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  " +
    5.      "return oRect.left+window.screenLeft + document.documentElement.scrollLeft - document.documentElement.clientLeft;");
    6.    Long yValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  " +
    7.      "return oRect.top+ window.screenTop + document.documentElement.scrollTop - document.documentElement.clientTop;");
    8.    Double width = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  return oRect.width;");
    9.    Double height = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  return oRect.height;");              
    10.    
    11.    Thread.sleep(3000);
    12.    //使用Robot截图
    13.    BtiCommon.captureScreen("Test111"
    14.      ,Integer.parseInt(String.valueOf(xValue))
    15.      ,Integer.parseInt(String.valueOf(yValue))
    16.      ,Integer.parseInt(new java.text.DecimalFormat("0").format(width))  
    17.      ,Integer.parseInt(new java.text.DecimalFormat("0").format(height))
    18.      );   
    19.                               
    复制代码

    1. import java.awt.image.BufferedImage;
    2. import java.awt.Robot;
    3. import java.awt.Rectangle;
    4. import java.io.FileOutputStream;
    5. import com.sun.image.codec.jpeg.*;

    6.   public static void captureScreen(String screenName, int x, int y,
    7.    int width, int height) {
    8.   try {
    9.    BufferedImage capture = null;
    10.    Rectangle area = new Rectangle(x, y, width, height);
    11.    Robot robot = new Robot();
    12.    capture = robot.createScreenCapture(area);
    13.    String fn = "E:\\" + screenName + ".jpg";
    14.    FileOutputStream out = new FileOutputStream(fn);
    15.    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    16.    encoder.encode(capture);
    17.    out.flush();
    18.    out.close();
    19.   } catch (Exception e) {
    20.    e.printStackTrace();
    21.   }
    22. }
    复制代码
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2014-7-11 11:08:11 | 只看该作者
    不错,标记下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    4#
    发表于 2014-7-12 17:18:29 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2014-7-19 08:54:35 | 只看该作者
    这样做浏览器不能最小化吧?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2014-8-1 09:30:24 | 只看该作者
    看来用SE做自动化确实比较复杂啊。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2014-8-1 09:30:38 | 只看该作者
    脚本后期怎么维护呢。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2018-5-8 17:25:18 | 只看该作者
    为什么我截取验证码的位置老是出错呢
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-27 18:24 , Processed in 0.078982 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表