2

我在 Xamarin UI 测试中检测到非常奇怪的行为。问题是 -framework无法点击某些标记的元素。这绝对是随机的问题。问题可能出现在物理设备或模拟器、Android 或 iOS 上。旧的或新的操作系统系统。我的测试场景:

app.WaitForElement(x => x.Marked("IDTransHistory"));
app.Tap(x => x.Marked("IDTransHistory"));
try
        {
            app.WaitForElement(x => x.Marked("Filter"));
            app.Tap(x => x.Marked("Filter"));
        }
        catch (Exception)
        {
            try
            {
                app.Tap(x => x.Marked("Button.Home"));
                app.Tap(x => x.Marked("IDTransHistory"));
            }
            catch (Exception)
            {
                try
                {
                    app.Tap(x => x.Marked("Button.Home"));
                    app.Tap(x => x.Marked("IDTransHistory"));
                }
                catch (Exception)
                {
                    app.Tap(x => x.Marked("Button.Home"));
                    app.Tap(x => x.Marked("IDTransHistory"));
                }
            }
        }

VS日志:

[5/18/2018 12:57:16 PM Informational] ------ Run test started ------
[5/18/2018 12:57:16 PM Informational] NUnit VS Adapter 2.0.0.0 executing tests is started
...
[5/18/2018 12:57:56 PM Informational] Waiting for element matching Marked("IDTransHistory").
[5/18/2018 12:58:03 PM Informational] Using element matching Marked("IDTransHistory").
[5/18/2018 12:58:04 PM Informational] Tapping coordinates [ 532, 1114 ].
[5/18/2018 12:58:05 PM Informational] Waiting for element matching Marked("Filter").
[5/18/2018 12:58:08 PM Informational] Using element matching Marked("Filter").
[5/18/2018 12:58:08 PM Informational] Tapping coordinates [ 684, 96 ].
[5/18/2018 12:58:24 PM Informational] Error while performing Tap(Marked("Date.Start"))
Exception: System.Exception: Unable to find element. Query for Marked("Date.Start") gave no results.
   at Xamarin.UITest.SharedApp.FirstWithLog[T](T[] results, ITokenContainer tokenContainer)
   at Xamarin.UITest.Android.AndroidApp.<Tap>c__AnonStoreyB.<>m__0()
   at Xamarin.UITest.Utils.ErrorReporting.With(Action func, Object[] args, String memberName)
[5/18/2018 12:58:24 PM Informational] Waiting for element matching Marked("Filter").
[5/18/2018 12:58:28 PM Informational] Using element matching Marked("Filter").
[5/18/2018 12:58:28 PM Informational] Tapping coordinates [ 684, 96 ].
[5/18/2018 12:58:32 PM Informational] Using element matching Marked("Date.Start").
[5/18/2018 12:58:32 PM Informational] Tapping coordinates [ 71, 298 ].
[5/18/2018 12:58:35 PM Informational] Using element matching Text("2018").
[5/18/2018 12:58:35 PM Informational] Tapping coordinates [ 139, 228 ].

好的,您可以看到标记的元素Filter使用 -> Tapping 坐标 [684, 96]。这意味着该元素存在于监视器上。但是第一次这不起作用。我使用 Nunit 3.10 和 Xamarin UI Test 2.24。此问题可能出现在随机设备 - iOS 或 Android、模拟器或物理设备上。当前测试是在三星 sm a310f 上进行的。我不知道这是 Xamarin UI 测试的错误还是可能是 Calabash。

更新:

代码 -

app.ScrollDownTo(x => x.Marked("IDTransHistory"));
app.Tap(x => x.Marked("IDTransHistory"));
app.WaitForElement(x => x.Marked("Filter"));
app.Tap(x => x.Marked("Filter"));
app.WaitForElement(x=>x.Marked("Date.Start"));
app.Tap(x => x.Marked("Date.Start"));

日志 -

[5/21/2018 3:05:00 PM Informational] Skipping installation: Already installed.
----
[5/21/2018 3:05:34 PM Informational] Scrolling down to Marked("IDTransHistory")
[5/21/2018 3:05:37 PM Informational] Using element matching Marked("IDTransHistory").
[5/21/2018 3:05:37 PM Informational] Tapping coordinates [ 533, 1114 ].
[5/21/2018 3:05:38 PM Informational] Waiting for element matching Marked("Filter").
[5/21/2018 3:05:40 PM Informational] Using element matching Marked("Filter").
[5/21/2018 3:05:40 PM Informational] Tapping coordinates [ 684, 96 ].
[5/21/2018 3:05:41 PM Informational] Waiting for element matching Marked("Date.Start").
[5/21/2018 3:05:56 PM Informational] Error while performing WaitForElement(Marked("Date.Start"), "Timed out waiting for element...", null, null, null)
Exception: System.TimeoutException: Timed out waiting for element...
   at Xamarin.UITest.Shared.WaitForHelper.WaitForAny[T](Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout)
   at Xamarin.UITest.Android.AndroidApp.<WaitForElement>c__AnonStorey31.<>m__0()
   at Xamarin.UITest.Utils.ErrorReporting.With[T](Func`1 func, Object[] args, String memberName)
[5/21/2018 3:05:57 PM Informational] Query for * gave 46 results.
[5/21/2018 3:05:57 PM Informational] [
  {
4

4 回答 4

0

来自文档: https ://docs.microsoft.com/en-us/appcenter/test-cloud/uitest/

Xamarin.UITest 需要 NUnit 2.6.3 或 2.6.4 才能运行测试。Xamarin.UITest 与 NUnit 3.x 不兼容。

那可能是你的问题。

我还会检查是否:

  1. 点击“过滤器” - 不会导致任何布局更改(例如动画) -> 在这种情况下暂停可能会有所帮助。

  2. 将元素 ID 从“Date.Start”更改为不带点 (.) 的内容,例如“StartDate”

于 2019-01-16T05:04:44.920 回答
0

UITest 测试的正常做法是在您执行手势后等待某些定义的状态 - 所以我建议在每次点击后添加等待命令。

例如,我会将您的示例编码为:

app.WaitForElement(x => x.Marked("IDTransHistory"));
app.Tap(x => x.Marked("IDTransHistory"));
app.WaitForElement(x => x.Marked("Button.Home"));
app.Tap(x => x.Marked("Button.Home"));
app.WaitForElement(x => x.Marked("IDTransHistory"));
app.Tap(x => x.Marked("IDTransHistory"));

这样,您在尝试按下它之前等待元素出现在屏幕上(对于某些设备,这比其他设备更重要,因为屏幕转换动画可能需要一些时间) - 也可能是元素标记为具有在尚未准备好接收手势时进行坐标 - 因此,如果上述方法不起作用,您可以尝试在Thread.Sleep之前添加 aTap以使 UI 有时间准备好 - 这可能有助于稳定您的测试。

如果有必要 - 你最终会得到类似这样的测试代码:

app.WaitForElement(x => x.Marked("IDTransHistory"));
Thread.Sleep(500);
app.Tap(x => x.Marked("IDTransHistory"));
app.WaitForElement(x => x.Marked("Button.Home"));
Thread.Sleep(500);
app.Tap(x => x.Marked("Button.Home"));
app.WaitForElement(x => x.Marked("IDTransHistory"));
Thread.Sleep(500);
app.Tap(x => x.Marked("IDTransHistory"));

我建议从 500 的睡眠开始,以 500 的增量提高它,直到测试变得稳定。

如果所有其他方法都失败了 - 我会使用Repl它来调查问题 - 可能是某些东西阻碍了手势。

还值得注意的是(尽管根据您的描述,这不是您的问题)在 iOS 11 中 - Apple 对元素的存在方式(或不存在方式)进行了一些更改,Marked因此一些以前工作的测试可能会停止工作,因为 UI 不再Marked以同样的方式识别它们。解决这个问题的最佳方法是再次使用Repl.

于 2018-05-18T20:00:26.390 回答
0

运行app.Repl();并进入 tree 。您会发现 UI 可见代码列表在您的代码中尝试一次。如果它工作正常,或者使用 Class 和类名,而不是在 UI 上使用文本标记。例如:- app.Tap( a => a.Class("classs-name"));//如果您使用相同的类名,则使用索引作为app.Tap( a => a.Class("classs-name").index(value));

于 2018-11-02T10:04:51.040 回答
0

我在使用 ipod touch 模拟器时遇到了这个问题,当我更改为 iPhone 模拟器时,它按预期工作

于 2021-05-11T11:43:07.987 回答