2017-07-24 5 views
0

UITest Neuling hier, und direkt aus dem Tor traf ich eine Wand ... Mein Android-Formular verfügt über ein benutzerdefiniertes Steuerelement "AccessCodeEntry", die von Xamarin.Forms.Entry erbt. XAML sieht im Grunde wie folgt ...Xamarin UITest kann nicht eingebenText

<Label Grid.Row="0" Grid.Column="0" Text="{Translate AccessCodeLabel}" InputTransparent="false" HorizontalOptions="LayoutOptions.Center" VerticalOptions="LayoutOptions.CenterAndExpand"/> 
<ContentView Grid.Row="1" Grid.Column="0"> 
    <local:AccessCodeEntry 
     x:Name="AccessCodeEntry" 
     WidthRequest="215" 
     HeightRequest="80" 
     Text="{Binding AccessCode}" 
     Placeholder=" * * * * *" 
     BackgroundColor = "White" 
     HorizontalOptions = "LayoutOptions.Center"/> 
</ContentView> 

Dies macht wie: Access Code label and textbox

Nach der Baumansicht für meine Form ist:

>>> tree 
[[object CalabashRootView] > PhoneWindow$DecorView] 
    [ActionBarOverlayLayout] id: "action_bar_overlay_layout" 
    [FrameLayout > ... > RendererFactory_DefaultRenderer] id: "content" 
     [RendererFactory_DefaultRenderer > RendererFactory_DefaultRenderer] 
     [LabelRenderer] 
      [FormsTextView] text: "Access Code:" 
     [RendererFactory_DefaultRenderer > ... > EntryEditText] 
     [RendererFactory_DefaultRenderer > CustomButtonRenderer] 
     [Button] text: "Load Access Code" 
     [RendererFactory_DefaultRenderer > ... > LabelRenderer] 
     [FormsTextView] text: "Patient ID:" 
    [ActionBarContainer] id: "action_bar_container" 
     [ActionBarView] id: "action_bar" 
     [LinearLayout > ActionBarView$HomeView] label: "Navigate up" 
      [ImageView] id: "up" 
      [ImageView] id: "home" 
>>> 

Wenn ich für diese Steuerung abgefragt werden, ob durch Text, Klasse, etc ... es gibt immer Koordinaten in der Mitte dieses Bereichs zurück. Das bedeutet, dass ich nicht in die Textbox tippen kann und die Soft-Tastatur nicht angezeigt wird. Ich bekomme immer eine Timeout-Ausnahme, die auf die Tastatur wartet, wenn ich versuche, Text einzugeben. Hier ist eine Beispielabfrage & Ergebnis:

>>> app.EnterText("Access Code:", "ABC12") 
Using element matching Marked("Access Code:"). 
Tapping coordinates [ 238, 188 ]. 
Error while performing EnterText(Marked("Access Code:"), "ABC12") 
Exception: System.TimeoutException: Timed out waiting for keyboard to be shown. 
    at Xamarin.UITest.Shared.WaitForHelper.WaitFor(Func`1 predicate, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) 
    at Xamarin.UITest.Android.AndroidApp.<EnterText>c__AnonStorey6.<>m__0() 
    at Xamarin.UITest.Utils.ErrorReporting.With(Action func, Object[] args, String memberName) 
Exception: Error while performing EnterText(Marked("Access Code:"), "ABC12") 
>>> 

Hier sind weitere Fragen habe ich versucht, und ich erhalten grundsätzlich die gleichen Koordinaten und Fehler:

app.EnterText(c => c.Text("Access Code:"), "ABC12") 
app.EnterText(c => c.Class("FormsTextView"), "ABC12") 

ich den Emulator zu tun haben setzen Sie ein weiches verwenden Tastatur. Irgendwelche Vorschläge, wie man das macht? Danke!

+0

Es wäre hilfreich, enthalten die Abfrage Sie versuchen, zur Zeit. Es wäre auch hilfreich, wenn Sie die REPL ('app.Repl()') öffnen und die Baumansicht hier einschließen (geben Sie einfach 'tree' in die REPL ein). – matisse

+0

danke, @matisse ... Ich habe meine ursprüngliche Frage mit den Daten aktualisiert. –

Antwort

0

Es scheint, dass Sie für die Beschriftung am oberen Rand Ihres benutzerdefinierten Steuerelements statt den Eintrag selbst abfragen. Sie sollten in der Lage sein, Ihre Suche zu starten direkt für den Eintrag suchen:

app.EnterText(x => x.Class("EntryEditText"), "ABC12"); 

Oder Sie könnten die Geschwister Ihres Etiketts mit greifen:

app.EnterText(x => x.Text("Access Code:").Parent(0).Sibling(), "ABC12"); 
+0

Danke, @matisse .... erzählte dir, ich wäre ein Neuling :) –

Verwandte Themen