在我们的Xamarin.Forms
解决方案中运行良好,我会仔细检查您是否正在导出方法MainActivity
(这是Xamarin.Forms
基于 Android 项目中唯一可以添加 casbash 后门的方法)并执行 casbahWaitForElement
以确保主要活动在之前运行Backdoor
调用发生。
使用基于默认/模板的Forms
解决方案/项目的快速测试。
在 Android(基于 Xamarin.Forms`)项目中:
复制树:
[[object CalabashRootView] > PhoneWindow$DecorView]
[ActionBarOverlayLayout] id: "decor_content_parent"
[FrameLayout > ... > LabelRenderer] id: "content"
[FormsTextView] text: "Welcome to Xamarin Forms!"
班级内MainActivity
:
[Activity (Label = "UITestBackDoorForms.Droid", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
后门导出方式:
[Export("MyBackdoorMethod")]
public void MyBackdoorMethod()
{
System.Diagnostics.Debug.WriteLine("In through the backdoor - do some work");
}
在测试项目中:
[Test]
public void InvokeBackdoor()
{
// Wait for the Activity to load
app.WaitForElement(c => c.Marked("decor_content_parent"));
// Invoke the backdoor method MainActivity.MyBackDoorMethod
app.Invoke("MyBackdoorMethod");
}
LogCat 输出:
I/System.out( 5754): params: {json={"query":"* marked:'decor_content_parent'","operation":{"method_name":"query","arguments":[]}}
I/System.out( 5754): }
~~~
I/System.out( 5754): URI: /backdoor
I/System.out( 5754): params: {json={"method_name":"MyBackdoorMethod","arguments":[]}
I/System.out( 5754): }
~~~
I/mono-stdout( 5754): In through the backdoor - do some work
Xamarin 测试云代理将尝试按以下顺序定位该方法:
后门
参考:https ://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/
Xamarin 测试云代理将尝试按以下顺序定位该方法:
- Android.App.Application 子类。
- 当前活动。
- 根视图的上下文。
更新(用户提供的代码):
之前的测试代码:
[Test]
public void AppLaunches()
{
app.Repl();
//app.Screenshot("First screen.");
//Assert.IsTrue(true);
app.WaitForElement(c => c.Marked("action_bar_overlay_layout"));
app.Invoke("Test");
}
复制输出:
>>> tree
[[object CalabashRootView] > PhoneWindow$DecorView]
[ActionBarOverlayLayout] id: "decor_content_parent"
[FrameLayout > ... > Platform_DefaultRenderer] id: "content"
[ButtonRenderer]
[Button] text: "Test1"
[ButtonRenderer]
[Button] text: "Test2"
[ButtonRenderer]
[Button] text: "Test3"
问题:
1)您正在等待一个名为“action_bar_overlay_layout”的元素,您可以等待一个名为“decor_content_parent”的Activity。我倾向于使用通过 Repl 树的顶级输出显示的内容,它最容易匹配并且其他人也可以跟随。
2) 您试图调用导出为的方法,Test
但MainActivity.as
其中被标记为[Export("MyBackdoorMethod")]
.
之后的代码更改:
[Test]
public void AppLaunches()
{
app.Repl();
app.WaitForElement(c => c.Marked("decor_content_parent"));
app.Invoke("MyBackdoorMethod");
}
再次运行测试并成功,您的调试输出被写入logcat
.
日志猫:
I/mono-stdout( 8641): In through the backdoor - do some work