Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试记录器和Xamarin表单-Id不可用于UITest_Xamarin_Xamarin.forms_Uitest - Fatal编程技术网

测试记录器和Xamarin表单-Id不可用于UITest

测试记录器和Xamarin表单-Id不可用于UITest,xamarin,xamarin.forms,uitest,Xamarin,Xamarin.forms,Uitest,我一直在尝试对使用Xamarin表单创建的Android和iOS应用程序运行TestRecorder。当我点击TestRecorder中的一个控件时,我看不到生成的C文件中的Id,只看到类类型 我决定从等式中删除测试记录器,并尝试在Xamarin Forms Android应用程序上运行基本的UI测试 我从这里下载了一个演示应用程序: https://developer.xamarin.com/samples/xamarin-forms/UsingUITest/ 它应该准备好所有东西来正确地针

我一直在尝试对使用Xamarin表单创建的Android和iOS应用程序运行TestRecorder。当我点击TestRecorder中的一个控件时,我看不到生成的C文件中的Id,只看到类类型

我决定从等式中删除测试记录器,并尝试在Xamarin Forms Android应用程序上运行基本的UI测试

我从这里下载了一个演示应用程序:

https://developer.xamarin.com/samples/xamarin-forms/UsingUITest/
它应该准备好所有东西来正确地针对UITest工作,包括在MainActivity中将样式ID映射到ContentDescriptions的样式ID和代码

我在REPL终端会话中运行tree来检查屏幕层次结构,它似乎没有显示应该有它们的控件的ID

>>> tree
[[object CalabashRootView] > PhoneWindow$DecorView]
  [ActionBarOverlayLayout] id: "decor_content_parent"
    [FrameLayout > ... > Platform_DefaultRenderer] id: "content"
      [ButtonRenderer]
        [Button] label: "MyButton",  text: "Click me"
      [LabelRenderer]
        [FormsTextView] label: "MyLabel",  text: "Hello, Xamarin.Forms!"
  [View] id: "navigationBarBackground"
  [View] id: "statusBarBackground"
>>>

有什么想法吗?

在Xamarin表单中,StyleId本质上只是一个占位符,您可以使用它来转移到本机计数器部分

对于Android,请确保在MainActivity.cs中有此选项

Xamarin.Forms.Forms.ViewInitialized += (object sender, Xamarin.Forms.ViewInitializedEventArgs e) => {
                if (!string.IsNullOrWhiteSpace(e.View.StyleId))
                {
                    e.NativeView.ContentDescription = e.View.StyleId;
                }
            };
在iOS中,您可以这样做

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();

            Forms.ViewInitialized += (object sender, ViewInitializedEventArgs e) => {
                if (null != e.View.StyleId)
                {
                    e.NativeView.AccessibilityIdentifier = e.View.StyleId;
                }
            };

            LoadApplication(new App());

#if ENABLE_TEST_CLOUD
// requires Xamarin Test Cloud Agent
Xamarin.Calabash.Start();
#endif

            return base.FinishedLaunching(app, options);
        }

然后,您应该开始看到Xamarin表单元素的ID出现。

样式ID在该输出中。。。看到MyButton和MyLabel了吗?这些是StyleId值。你试过运行选择器来看看是否可以从中选择吗?谢谢Dylan-我可以在输出中看到MyButton的StyleId已经转换成MyButton的标签。在进一步挖掘之后,我看到StyleId被转换为iOS的AccessibilityIdentifier和Android的ContentDescription,我猜这些都是作为标签出现的。我的问题是,尽管我可以通过编程方式访问这些,但当我单击控件时,TestRecorder不会生成。标记。我在MainActivity中找到了您提到的代码,并且对生成本机计数器部件感到相对高兴。然而,测试记录器似乎无法识别这些元素,并且不会为带有StyleId的控件生成.标记,但仅针对按钮,甚至使用按钮标题,您说按钮的Id没有通过,但其他元素正常?StyleId不会转换为Id,而是转换为iOS和Android的ContentDescription。测试记录器应识别这些,并生成一个。标记,但不标记。它确实会为按钮生成一个.Marked,但是使用按钮标题而不是样式,这就是我对Id的StyleId的意思。对我来说,除了预览工具,我看不到任何东西,你很可能遇到了一个bug。如果您可以在标准UITests中执行REPL并查看所有的StyleId,那么您需要联系Xamarin的某个人。我只是想看看你需要联系谁。虽然它是下午在旧金山和可能不会得到回应,直到明天。这将是你最好的选择。来自TestCloud团队的人员将看到并查看它。我也不太熟悉测试记录器,所以可能有一些明显的东西我们忽略了。