最近搞 android toast 消息验证,看了一下 uiautomator2.0 server 的源代码,启动 uiautomator2.0 server 后,可以通过 post 请求来执行自动化测试
adb shell am instrument -w io.appium.uiautomator2.server.test/android.support.test.runner.AndroidJUnitRunner
private void registerPostHandler() {
register(postHandler, new NewSession("/wd/hub/session"));
register(postHandler, new FindElement("/wd/hub/session/:sessionId/element"));
register(postHandler, new FindElements("/wd/hub/session/:sessionId/elements"));
register(postHandler, new Click("/wd/hub/session/:sessionId/element/:id/click"));
register(postHandler, new Click("/wd/hub/session/:sessionId/appium/tap"));
register(postHandler, new Clear("/wd/hub/session/:sessionId/element/:id/clear"));
register(postHandler, new RotateScreen("/wd/hub/session/:sessionId/orientation"));
register(postHandler, new RotateScreen("/wd/hub/session/:sessionId/rotation"));
register(postHandler, new PressBack("/wd/hub/session/:sessionId/back"));
register(postHandler, new SendKeysToElement("/wd/hub/session/:sessionId/element/:id/value"));
register(postHandler, new SendKeysToElement("/wd/hub/session/:sessionId/keys"));
register(postHandler, new Swipe("/wd/hub/session/:sessionId/touch/perform"));
register(postHandler, new TouchLongClick("/wd/hub/session/:sessionId/touch/longclick"));
register(postHandler, new OpenNotification("/wd/hub/session/:sessionId/appium/device/open_notifications"));
register(postHandler, new PressKeyCode("/wd/hub/session/:sessionId/appium/device/press_keycode"));
register(postHandler, new LongPressKeyCode("/wd/hub/session/:sessionId/appium/device/long_press_keycode"));
register(postHandler, new Drag("/wd/hub/session/:sessionId/touch/drag"));
register(postHandler, new AppStrings("/wd/hub/session/:sessionId/appium/app/strings"));
register(postHandler, new Flick("/wd/hub/session/:sessionId/touch/flick"));
register(postHandler, new ScrollTo("/wd/hub/session/:sessionId/touch/scroll"));
register(postHandler, new MultiPointerGesture("/wd/hub/session/:sessionId/touch/multi/perform"));
register(postHandler, new TouchDown("/wd/hub/session/:sessionId/touch/down"));
register(postHandler, new TouchUp("/wd/hub/session/:sessionId/touch/up"));
register(postHandler, new TouchMove("/wd/hub/session/:sessionId/touch/move"));
register(postHandler, new CompressedLayoutHierarchy("/wd/hub/session/:sessionId/appium/device/compressedLayoutHierarchy"));
register(postHandler, new NetworkConnection("/wd/hub/session/:sessionId/network_connection"));
}
private void registerGetHandler() {
register(getHandler, new Status("/wd/hub/status"));
register(getHandler, new CaptureScreenshot("/wd/hub/session/:sessionId/screenshot"));
register(getHandler, new GetScreenOrientation("/wd/hub/session/:sessionId/orientation"));
register(getHandler, new GetRotation("/wd/hub/session/:sessionId/rotation"));
register(getHandler, new GetText("/wd/hub/session/:sessionId/element/:id/text"));
register(getHandler, new GetElementAttribute("/wd/hub/session/:sessionId/element/:id/attribute/:name"));
register(getHandler, new GetSize("/wd/hub/session/:sessionId/element/:id/size"));
register(getHandler, new GetName("/wd/hub/session/:sessionId/element/:id/name"));
register(getHandler, new Location("/wd/hub/session/:sessionId/element/:id/location"));
register(getHandler, new GetDeviceSize("/wd/hub/session/:sessionId/window/:windowHandle/size"));
register(getHandler, new Source("/wd/hub/session/:sessionId/source"));
register(getHandler, new GetToastMessage("/wd/hub/session/:sessionId/getPostMsg"));//add by carl
}
因为 adb forward 的只是一个端口号,所以仅仅能通过 localhost 或 127.0.0.1 访问,网内其他用户无法访问,通过反向代理就可以实现其他用户访问了,从而达到共享手机的目的
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8201;
server_name http://10.24.108.125;
#charset koi8-r;
location /wd/hub/status {
proxy_pass http://localhost:8201/wd/hub/status;
}
}
这样就可以在网内访问这台手机,执行自动化测试了,就是每个路由都要写出来。