http://www.javaworld.com.tw/jute/post/view?bid=29&id=11490&sty=1&tpg=1&age=-1
搜尋此網誌
2014年2月21日
2014年2月10日
Android UIAutormator - First touch
1. Control and switch between multiple activities of a single app.
2. Control an switch between multiple apps.
3. Combine with API for result checking?
4. User gesture coverage (Single tap, Double tap, Long press, Swipe, Scroll, etc).
5. UI component travel
Study:
2. How to run: http://my.oschina.net/yuchaolee/blog/171289
3. Sample:
b. Calculator:
c. Guadian: http://www.theguardian.com/info/developer-blog/2013/jul/31/robust-testing-uiautomator-android
f. Clock: http://blog.chengyunfeng.com/?p=504 / http://mobileautomation.blogspot.tw/2012/11/android-uiutomater-sample-test-case.html
g.
5. Basic training: http://blog.chengyunfeng.com/?p=504
Step:
1. Create a Java project.
2. Add Junit lib.
3. Add android.jar & uiautomator.jar.
4. Coding.
5. <android-sdk>/tools/android create uitest-project -n <project_name> -t <AVD_ID> -p <project_path> (AVD_ID 透過 android list 取得)
6. Edit build.xml -> line2 ("help" -> "build").
7. build.xml -> ant build
8. adb push xxx.jar /data/local/tmp/
9. adb shell uiautomator runtest xxx.jar -c <Package_name>.<Class_Name>.
2014年2月7日
Java + Android + Sikuli + UIAutomator = Test automation
Project page: https://code.google.com/p/sikuli-api/
Eclipse:
Example: (Java project)
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.lang.annotation.Target;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import org.sikuli.api.DesktopScreenRegion;
import org.sikuli.api.ImageTarget;
import org.sikuli.api.ScreenRegion;
import org.sikuli.api.visual.Canvas;
import org.sikuli.api.visual.DesktopCanvas;
public class SikuliTest {
private static BufferedImage bi;
private static JFrame frame;
public static void main(String[] args) throws Exception {
try {
Util.execCMD("adb push WiFi_UItest.jar /data/local/tmp");
Util.execCMD("adb shell uiautomator runtest WiFi_UItest.jar -e CheckId 1 -c s2.wifi.TurnOn -c s2.wifi.CheckResult -s");
Util.execCMD("adb pull /mnt/sdcard/Pictures/test_TurnOn.png C:\\tmp");
loadImage();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
ScreenRegion s = new DesktopScreenRegion();
Thread.sleep(3000);
ScreenRegion result = s.find(new ImageTarget(new File("c:\\tmp\\383.jpg")));
// System.out.println("Score: " + result.getScore());
// System.out.println("State: " + result.getState());
// Construct a Canvas object of the type DesktopCanvas
Canvas canvas = new DesktopCanvas();
// Add a box around a screen region 'r'
canvas.addBox(result);
// Add a label on the screen region r
canvas.addLabel(result, "WE FOUND IT!!");
// Display the canvas for 3 seconds
canvas.display(3);
// frame.dispose();
} catch (IOException e) {
// handle exception
}
}
private static void loadImage() throws IOException {
bi = ImageIO.read(new File("C:\\tmp\\test_TurnOn.png"));
}
private static void createAndShowGUI() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
Graphics g2 = g.create();
g2.drawImage(bi, 0, 0, getWidth(), getHeight(), null);
g2.dispose();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(bi.getWidth()/3, bi.getHeight()/3);
}
};
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
// frame.setLocation(500, 20);
frame.setVisible(true);
}
}
Eclipse:
- sikuli-api-1.0.2-standalone.jar
- slf4j-nop-1.7.5.jar
- log4j-over-slf4j-1.7.5.jar
Example: (Java project)
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.lang.annotation.Target;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import org.sikuli.api.DesktopScreenRegion;
import org.sikuli.api.ImageTarget;
import org.sikuli.api.ScreenRegion;
import org.sikuli.api.visual.Canvas;
import org.sikuli.api.visual.DesktopCanvas;
public class SikuliTest {
private static BufferedImage bi;
private static JFrame frame;
public static void main(String[] args) throws Exception {
try {
Util.execCMD("adb push WiFi_UItest.jar /data/local/tmp");
Util.execCMD("adb shell uiautomator runtest WiFi_UItest.jar -e CheckId 1 -c s2.wifi.TurnOn -c s2.wifi.CheckResult -s");
Util.execCMD("adb pull /mnt/sdcard/Pictures/test_TurnOn.png C:\\tmp");
loadImage();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
ScreenRegion s = new DesktopScreenRegion();
Thread.sleep(3000);
ScreenRegion result = s.find(new ImageTarget(new File("c:\\tmp\\383.jpg")));
// System.out.println("Score: " + result.getScore());
// System.out.println("State: " + result.getState());
// Construct a Canvas object of the type DesktopCanvas
Canvas canvas = new DesktopCanvas();
// Add a box around a screen region 'r'
canvas.addBox(result);
// Add a label on the screen region r
canvas.addLabel(result, "WE FOUND IT!!");
// Display the canvas for 3 seconds
canvas.display(3);
// frame.dispose();
} catch (IOException e) {
// handle exception
}
}
private static void loadImage() throws IOException {
bi = ImageIO.read(new File("C:\\tmp\\test_TurnOn.png"));
}
private static void createAndShowGUI() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
Graphics g2 = g.create();
g2.drawImage(bi, 0, 0, getWidth(), getHeight(), null);
g2.dispose();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(bi.getWidth()/3, bi.getHeight()/3);
}
};
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
// frame.setLocation(500, 20);
frame.setVisible(true);
}
}
Image comparison
2. Sikuli
3. OpenCV
4. http://www.vlfeat.org/
2012年12月24日
[轉] Blog / 2010 / 10 / 04 / "Echo" Server, Client Example using Apache MINA
http://www.glamenv-septzen.net/en/view/11
2012年12月14日
[轉] Java Concurrency / Multithreading - Tutorial
http://www.vogella.com/articles/JavaConcurrency/article.html
[轉] [ Java設計模式 ] 多線程設計模式 : Worker Thread Pattern (等到工作來, 來了就工作)
http://puremonkey2010.blogspot.tw/2010/10/java-worker-thread-pattern.html
2012年12月4日
2012年10月31日
JChart2D Zoomable char
package com.qci.jchart2ddemo;
import info.monitorenter.gui.chart.Chart2D;
import info.monitorenter.gui.chart.ITrace2D;
import info.monitorenter.gui.chart.ZoomableChart;
import info.monitorenter.gui.chart.pointpainters.PointPainterDisc;
import info.monitorenter.gui.chart.traces.Trace2DSimple;
import info.monitorenter.gui.chart.views.ChartPanel;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ZoomTest extends JFrame {
private static final long serialVersionUID = -2249660781499017221L;
class ZoomAllAdapter implements ActionListener {
private ZoomableChart m_zoomableChart;
public ZoomAllAdapter(final ZoomableChart chart) {
this.m_zoomableChart = chart;
}
public void actionPerformed(final ActionEvent event) {
this.m_zoomableChart.zoomAll();
}
}
public static void main(final String[] args) {
ZoomTest zoomTest = new ZoomTest();
// Show the frame
zoomTest.setSize(640, 480);
zoomTest.setVisible(true);
}
public ZoomTest() {
super("ZoomTest");
Container c = this.getContentPane();
c.setLayout(new BorderLayout());
// Create a chart
ZoomableChart chart = new ZoomableChart();
ITrace2D trace = new Trace2DSimple();
// Add the trace to the chart. This has to be done before adding points (deadlock prevention):
chart.addTrace(trace);
// Add all points, as it is static:
Random random = new Random();
for(int i=100;i>=0;i--){
trace.addPoint(i,random.nextDouble()*10.0+i);
}
chart.setToolTipType(Chart2D.ToolTipType.VALUE_SNAP_TO_TRACEPOINTS);
// chart.setPointHighlighter(new PointPainterDisc(8));
// Add chart to the pane
c.add(new ChartPanel(chart));
// Create the zoomAll button
JButton zoomAllButton = new JButton("Zoom All");
zoomAllButton.addActionListener(new ZoomAllAdapter(chart));
// Add zoomAll button to the pane
c.add(zoomAllButton, BorderLayout.NORTH);
// Enable the termination button:
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(final WindowEvent e) {
System.exit(0);
}
});
}
}
2012年10月30日
2012年9月27日
2012年7月5日
2012年3月9日
2012年2月23日
2011年10月27日
2011年10月26日
很棒的 tutorial & sample code 網站
包含 Java / Android / C# / C++ / …
陸續更新
大陸很多blog或論壇都有很豐富的資料唷,不過不見得有RSS,只能用Google大神了
Android / Java
- http://www.java2s.com/
- http://en.csharp-online.net/CSharp_Code_Snippets
- http://www.androidsnippets.com/
- http://www.dreamincode.net/code/browse.php
- http://www.freejavaguide.com/javasource.htm
- http://wikis.sun.com/display/code/Home
- http://sebsauvage.net/python/snyppets/
- http://www.switchonthecode.com/
- http://snippets.dzone.com/
- http://snipplr.com/
- http://www.daniweb.com/software-development/2
- http://www.izzycode.com/
- http://www.uthcode.com/docs/genindex.html
- http://www.java-examples.com/
- http://www.cnmsdn.com/
Python
C# Design pattern:
- http://wiki.pastwind.org/home/python-cheng-shi-yu-yan
C# Design pattern:
- http://www.dotnetfunda.com/articles/article889-design-pattern-implementation-using-csharp.aspx
- http://www.dofactory.com/Patterns/Patterns.aspx
- http://dotnetframework.blogspot.com/2005/03/c23design-pattern.html
- http://en.csharp-online.net/CSharp_Design_Patterns_Made_Simple
訂閱:
文章 (Atom)