我目前正在为Android扫描仪应用程序编写UI测试。
由于我无法直接在UI测试中引用xamarin android项目,因为由于与Xamarin.UITest框架所使用的.Net Framework 4.6.1不兼容,扫描器服务将无法构建。
因此,我的Xamarin.Forms项目中有一个接口,其中包装了所需的类,该类由Xamarin Android项目中的类实现,并通过Export方法返回,因为您无权访问Xamarin中的应用运行时封装了apk运行时的UI测试。
Xamarin形式:
public interface IWrapper {
public WrappedClass { get;}
}
Xamarin Android:
public class Wrapper: Java.Lang.Object, IWrapper {
public WrappedClass { get;}
public Wrapper(WrapperClass wrapperClass){
this.WrappedClass = wrapperClass;
}
}
公开方法:
[Export]
public Wrapper GetWrapper(){
Wrapper wrapper = new Wrapper(this._app.WrappedClass);
return Wrapper;
}
Xamarin UI测试:
[SetUp]
public void BeforeEachTest() {
//md541ff4e74307b9d66e591e6d9ce55078f.Wrapper@41562080
object exportObject = this._app.Invoke("GetWrapper");
// null
IWrapper wrapper = (IWrapper)exportObject;
this._appRuntimeWrappeClass = wrapper.WrappedClass;
}
是否甚至可以将对象转换为Interface并获得对基础运行时对象的访问权以影响您的应用?