下面以QA的形式来阐述若干问题。
如Selenium的Android driver和TMTS,我想原因有三:
1. Android的签名机制阻碍了黑盒instrument操控浏览器
2. 能够引用源码和反射。前者通过调用findViewById能更方便地找到需要的View,后者可以通过反射更易于对浏览器进行操控
3. 易于绑定前端的javascript和后端的java代码,如TMTS在包com.taobao.tmts.framework.viewelememt的类TmtsWebView中先定义private final JavascriptInterface jInterface;再在函数initWebViewSettings(WebView webView)中绑定:webView.addJavascriptInterface(jInterface, "webdriver");TMTS在这点上有对Selenium的Android driver进行借鉴。
Android手机绝大多数都不能设置不休眠屏幕永远不黑,于是有了这个需求。Selenium的Android driver中采用在包org.openqa.selenium.android.server中的类JettyService中的类startServer:PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "IJetty");
wakeLock.acquire();然后在函数onDestroy中释放if (wakeLock != null) {
wakeLock.release();
wakeLock = null;
}
以上Api调用需要在AndroidManifest.xml中设置权限:“<uses-permission android:name="android.permission.WAKE_LOCK"/>”。但目前TMTS没有实现这个需求,不知道为何?我们这边的是写成了一个Service,但在部分机型上不起作用。