[英]How to click on a marker on the google map for Xamarin UITest
我為 Android 應用程序編寫了 Xamarin UITest。 在應用程序中使用谷歌地圖。 請幫幫我,如何點擊地圖上的標記?
標記未顯示在視圖樹中,我的猜測是它們是在地圖框架布局內的屏幕上繪制的。
鑒於標記位於地圖的中心,您可以使用以下內容點擊它:
(帶有 ID 為“map”的地圖片段)
var map = app.Query("map")
var middleX = (map.First().Rect.Width + map.First().Rect.X) / 2
var middleY = (map.First().Rect.Height + map.First().Rect.Y) / 2
app.TapCoordinates(middleX, middleY)
但我認為這就是你在地圖中所能做的。
如果您自己構建應用程序,我建議您查看后門方法。 這些方法可以構建到應用程序中,然后從測試中調用。
Obj-C 和 Java 應用程序有很多示例。 這是 C# 后門方法的示例,您可以將其放入 MainActivity 或 AppDelegate 類: http : //danatxamarin.com/2015/05/07/configuring-backdoor-methods-in-c-for-xamarin-test -雲/
我會創建一個后門來返回你需要的關於地圖的任何數據,然后使用app.Invoke("myNewMethod");
這將返回一個字符串(可能是 json)。 此字符串可以包含屏幕坐標,然后您可以將其傳遞給app.TapCoordinates(x, y);
.
簡短的回答是,Android 上的 Google 地圖並沒有真正以可自動化的方式公開對象,因此第二個最佳選擇是后門。
如果你有一個自定義的 android 渲染器,你可以在里面模擬點擊,主要的技巧是訪問渲染器內的標記:
var field = this.GetType().BaseType.GetField("_markers", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
var markers = (List<Marker>)field.GetValue(this);
現在對於markers
任何元素,因為您無法發送真正的點擊,您可以模擬它。 粘貼來自我的實時項目的代碼:
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == "ExternalClickedPin")
{
if (FormsControl.ExternalClickedPin != null)
{
var pin = Map.Pins.FirstOrDefault(x => x.MarkerId == FormsControl.ExternalClickedPin.MarkerId);
if (pin != null)
{
var field = this.GetType().BaseType.GetField("_markers", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
var hiddenMarkers = (List<Marker>)field.GetValue(this);
var marker = hiddenMarkers.FirstOrDefault(x => x.Id == pin.MarkerId.ToString());
if (marker != null)
{
//simulating click
//1 invoke clicked event
// pin.SendMarkerClick(); // <- if needed for tests
//2 show info on map
marker.ShowInfoWindow(); //just what i was needing
//3 center pin on map
//Map.MoveToRegion(...); <- not here, im calling this from Forms subclassed control
}
}
FormsControl.ExternalClickedPin = null;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.