2017-04-01 79 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