2017-04-01 76 views
0

我已经在TestComplete论坛上提出了同样的问题,但我希望能够在这里找到知道Xamarin的人,因为我的大多数问题都与Xamarin相关的多于TestComplete。Xamarin用TestComplete测试

我们即将将所有应用程序切换到Xamarin,并希望继续使用TestComplete进行UI测试。以前(在测试原生Android应用程序时),我们使用对象ID来标识在Android View xmls中指定的ui控件。这是非常方便的IDS是

  • 人类可读
  • 独特
  • 跨应用程序不断运行

在Xamarin,控制似乎有IDS,太多,但我们有一些问题与他们:

  • 大多数对象没有身份证,有些人有一个md5哈希作为他们的ID。对于大多数控件来说,在Android上非常方便,并且这在Xamarin中似乎已经消失了。有三个问题:基于什么是md5哈希,它们什么时候改变,是否有可能仍然设置自己的控件ID?
  • 某些对象以相同的id出现两次,但具有不同的ObjectIndex。我只从iOS中了解这种现象,其中UI在运行时创建,有时UI控件无法正确回收,因此如果您再次打开相同的视图,最终可能会看到相同的控件,其中一个控件隐约可见,另一个可见。这是iOS上流氓的一种痛苦,因为在TestComplete中可能很难确定当前可见的实例。我希望现在我们可以以某种方式摆脱这一点,但我不知道如何。
对象ID

Screenshot of object ids: (1): md5-hashes, (2) Some objects appear twice

截图:(1):MD5哈希值,(2)的某些对象出现两次

  • 对象是只能在一定水平访问。例如,我们可以访问md52....MasterDetailContainer并与其互动,但其唯一的子女View("NO_ID")无法访问。 TestComplete无法在ObjectBrowser中显示它的屏幕截图,并且与其进行任何交互(包括“屏幕上的突出显示”)都会导致错误。这也适用于所有的孩子。这一点尤其重要,因为我们的所有UI控件都是该MasterDetailContainer的子项,并且无法访问其子项会使测试无用。
  • TestComplete,Xamarin Forms Designer和Android UI Automator Viewer在应用程序中显示了相同视图的完全不同的对象层次结构。这怎么解释?

我一直在与开发团队讨论这一切,但因为他们对Xamarin也是新手,他们也不知道答案。如果有人知道Xamarin coudl帮助我们解决一些问题,我会很高兴。

回答

0

设置我们自己的控件ID?

您在截图中引用的控件ID显示View的Java类名称。 Xamarin在构建过程中为您创建/访问的每个Java对象(从C#)创建Android Callable Wrappers(ACW)。

的ACW默认的软件包名称将基于该MD5SUM组装限定名称的类型出口的。

您可以控制使用类生成的名称属性:

  • RegisterAttribute
  • BroadcastReceiverAttributeName
  • ContentProviderAttributeName
  • ActivityAttributeName
  • ServiceAttributeName
  • ApplicationAttributeName

也就是说,如果你有一个子类EditView并要覆盖缺省ACW名代:

[Register("com.sushihangover.SOApplication.AVeryCustomEditView")] 
public class CustomEditView : EditView 
{ 
    ~~~ 
} 

但是,既然你提到Xamarins.Forms,我假设你不使用AXML(Xamarin.Android)但XAML(Xamarin.Forms)创建您的用户界面。窗体编程创建通过独特的基于平台的渲染和自己的布局管理器视图层次,因此你不会有你通过Xamarin窗体设计可视化,以创建什么,并通过Android UI查看的XAML的一个一对一的映射Automator查看器也不会有这些视图类可用于应用Register属性。

由于SmartBear说,他们支持Xamarin.iOSXamarin.Android,您应该创建SmartBear支持案例,了解他们怎么也如果支持Xamarin.Forms基于用户界面。

+0

谢谢你的回答!不幸的是,我们使用Xamarin.Forms,但我会问SmartBear。 – vatbub