【问题标题】:Xamarin Forms isn't setting StyleId for UITestXamarin Forms 没有为 UITest 设置 StyleId
【发布时间】:2016-05-17 22:02:17
【问题描述】:

我正在尝试让 Xamarin Forms 与 UITest 一起使用,但我似乎无法在 iOS 中设置 StyleId 属性(我没有 Android 许可)。

我已遵循所有文档,这些是我到目前为止所采取的步骤:

AppDelegate:

static readonly IntPtr setAccessibilityIdentifier_Handle = Selector.GetHandle("setAccessibilityIdentifier:");

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

    Forms.ViewInitialized += (object sender, ViewInitializedEventArgs e) => {
        // http://developer.xamarin.com/recipes/testcloud/set-accessibilityidentifier-ios/
        if (null != e.View.StyleId) {
            e.NativeView.AccessibilityIdentifier = e.View.StyleId;
            Console.WriteLine("Set AccessibilityIdentifier: " + e.View.StyleId);
        }
    };

    ...

    #if DEBUG
    Xamarin.Calabash.Start();
    #endif

    ...
}

XAML 内容页面:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             x:Class="Ignite.Abacus.Mobile.OptionsView"
             Title="Options">
    <ContentPage.Content>
        <StackLayout>
            <Label Text="Test" StyleId="Test" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

现在,这是关键:

如果我调试应用程序,我可以清楚地看到 StyleId 正在设置,因为 AppDelegate 中的 Forms.ViewInitialized 处理程序中的 Console.WriteLine 调用正在写入应用程序输出。但是,如果我调试我拥有的单元测试并从 REPL 查询它,它似乎不会连接 StyleId 属性,因为app.Query(c =&gt; c.Marked("Test")) 返回零结果。

我希望在测试范围内运行应用程序时看到控制台输出 - 但它似乎没有向应用程序输出窗口或测试结果窗口输出任何内容(打开输出)...

关于我缺少什么的任何想法?

【问题讨论】:

  • 呸 - 这一定是我的特定项目的问题 - 我可以让 UITest 在新项目中正常工作,但我的有问题 - 我将重建项目文件

标签: c# ios xamarin xamarin.uitest


【解决方案1】:

今天碰到这个;有一个比手动“文件->重置模拟器”更简单的解决方法,那就是配置你的[SetUp]自动为你做:

using System.Diagnostics;

[SetUp]
public override void SetUp()
{
    const string simulatorId = "2261E5E1-758A-4967-8BF2-181E8099379F"; // iPhone 5s iOS 8.2
    ResetSimulator(simulatorId);

    // an API key is required to publish on Xamarin Test Cloud for remote, multi-device testing
    app = ConfigureApp.iOS.AppBundle(PathToIPA).DeviceIdentifier(simulatorId).EnableLocalScreenshots().ApiKey(Constants.XamarinTestCloudApiKey).StartApp();
}

public static void ResetSimulator(string deviceId)
{
    var shutdownProcess = Process.Start("xcrun", string.Format("simctl shutdown {0}", deviceId));
    shutdownProcess.WaitForExit();
    var eraseProcess = Process.Start("xcrun", string.Format("simctl erase {0}", deviceId));
    eraseProcess.WaitForExit();
}

【讨论】:

  • 非常好的解决方法 - 感谢您同时更新错误帖子
【解决方案2】:

啊哈!当我第一次开始看到这个问题时,我有一种感觉,但是感谢question asked here,我能够找到解决这个问题需要做的事情。

基本上——我已经开始使用 UITest 创建单元测试,但没有设置任何 StyleId 属性——然后我开始追溯性地检查并将 StyleId 属性添加到我的元素中。发生的事情是 iOS 模拟器正在缓存我的应用程序,而不是使用最新版本。我做了一切从删除我所有项目中的 bin/obj 文件夹并通过 Xamarin Studio 重建它们并且没有任何工作,所以我认为它是 UITest 系统之后。

在上面链接的问题中,我看到有人注意到您需要进入 iOS 模拟器并单击“iOS 模拟器 -> 重置内容和设置”,然后它会删除我缓存的应用程序。我重建了,现在看来一切正常。

这让我陷入了困境,因为它仅在通过 Xamarin Studio 中的单元测试窗口启动时才会出现此问题 - 如果您直接运行或调试应用程序(不在单元测试范围内),它不会缓存应用。但是,如果您随后通过“单元测试”窗口重新启动应用程序,它将返回并再次使用缓存的应用程序。

我必须看看我是否可以在一个简单的项目中重现并提交错误。

【讨论】:

  • 将此作为 Xamarin 的错误提交Bug 25374
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
相关资源
最近更新 更多