最近为了兼容 android 端的 toast 消息验证,切到了 ui2.0,但是 ui2.0 没有弹窗自动点掉的实现
public class AndroidServer {
private final int driverPort;
private final HttpServer webServer;
public AndroidServer(int port) {
driverPort = port;
webServer = new HttpServer(driverPort);
init();
errorHandle();
Logger.info("AndroidServer created on port " + port);
}
……
public void errorHandle() {
getUiDevice().registerWatcher("installAPP", new UiWatcher() {
@Override
public boolean checkForCondition() {
/**meizu **/
//Logger.info("安装应用时,检查弹窗并点击允许");
if (getUiDevice().hasObject(By.pkg(Pattern.compile("android")).text(Pattern.compile("允许")))) {
Logger.info("find the button: By.pkg(Pattern.compile(\"android\")).text(Pattern.compile(\"允许\")), click it");
getUiDevice().findObject(By.pkg(Pattern.compile("android")).text(Pattern.compile("允许"))).click();
}
return false; // no trigger);
}
});
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
getUiDevice().runWatchers();
getUiDevice().waitForIdle(2000);//避免第一次runWatchers还没有完成,立即运行了第二次
}
}
}).start();
}
法一:在起 server 时即调用该方法
法二:在创建 session 时调用该方法
因为现在 session 是单例的,所以这两个没什么区别,我选择的是第一个
因为 ui2.0 server 本身是 apk,存在安装时弹窗验证的问题,所以不能解决安装这两个 server apk 时的弹窗验证问题