Java中的Sikuli - 如何捕获截图/ Png?

时间:2012-08-28 09:47:50

标签: java automation sikuli

public class MyFirstSikuliTest {    
public static void main(String[] args) {
    App.open("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
    Screen s = new Screen();
    try{    
            s.click("How do I take the screenshot and pass the path of the PNG here?", 0);
            s.wait("How do I take the screenshot and pass the path of the PNG here?");
            s.type(null, "WEBSITE NAME", 0);
    }
    catch(FindFailed e){
            e.printStackTrace();
    }
}
}

如何截取屏幕截图并将PNG的路径传递给click方法和wait方法?请帮助。

PS:我想打开firefox浏览器,点击地址栏,输入网站名称,然后点击回车。

谢谢!

4 个答案:

答案 0 :(得分:3)

正如here所述,只需提供与屏幕截图对应的 PNG 图片的路径。

可以使用任何屏幕截图实用程序创建该屏幕截图。我曾经使用 sikuli IDE 编写脚本,它提供了一种创建屏幕截图的简单方法。

希望它有所帮助。

答案 1 :(得分:2)

public static void takePictureOfError(String Name) throws IOException,
        AWTException {
    new File("Errors").mkdir();
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Dimension screenSize = toolkit.getScreenSize();
    Rectangle screenRect = new Rectangle(screenSize);
    Robot robot = new Robot();
    BufferedImage image = robot.createScreenCapture(screenRect);
    utilsLogger.info(ImageIO.write(image, "png", new File("//"
            + Name)));
}

我希望这种方法有用,它对我有用;)

答案 2 :(得分:1)

Sikuli code to handle your PS request.

几行描述:

第3行:我打开一个新标签,以便地址栏看起来总是一样(条形图中的不同网址可能会注册为不同的图像)。这是Sikuli的主要编程要求,忽略了显示器的区域,这些区域可能会随着程序的使用而略有变化。您还可以减少图像的百分比比较。

第4行:Sikuli找到地址栏图片(图片来自Windows中的FF)。您可以调整Sikuli单击的图像上的位置,或者确保图像足够大,使得中间点击地址栏位置(即不是Sikuli单击地球图标)。我在第1行中定义的url文本被输入到选定的地址栏中。 url中的\ n是回车键。

答案 3 :(得分:0)

<强> Sikuli

new MockUp<ResultsAPIWrapper>() {
  @Mock
  void $clinit() {
    //disable static initialization
  }

  @Mock
  public String load() {
     return "done";
  }
};

<强> sikulix

public static void screenClipUser() throws IOException{
    org.sikuli.script.Screen screen = Screen.getPrimaryScreen();
    org.sikuli.script.Region region = screen.selectRegion("Select Area to capture as Image");
    ScreenImage clip = region.getLastScreenImage(); // screen.userCapture();
    ScreenImage printScreen = region.getScreen().capture();
    javax.imageio.ImageIO.write(clip.getImage(), "PNG", new File("D:\\SikuliImages\\Clip.png"));
    ImageIO.write(printScreen.getImage(), "PNG", new File("D:\\SikuliImages\\PrintScreen.png"));
    screenCaptureRegion(screen);
}
public static void screenCaptureRegion(Screen screen) throws IOException{
    java.awt.Point point = MouseInfo.getPointerInfo().getLocation();
    System.out.println("Mouse Location Co-Ordinates Previous Selected : " + point);
    //ScreenImage capturedRegion = screen.capture(point.x, point.y, 200, 200);
    ScreenImage capturedRegion = screen.capture(clip.x, clip.y, clip.w, clip.h);
    ImageIO.write(capturedRegion.getImage(), "PNG", new File("D:\\SikuliImages\\CapturedRegion.png"));
}