Xamarin Forms没有为UITest设置StyleId

时间:2014-12-14 20:14:37

标签: c# ios xamarin xamarin.uitest

我正在尝试让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 ContentPage:

<?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正在设置,因为Console.WriteLineForms.ViewInitialized处理程序中的AppDelegate调用正在写入应用输出。但是,如果我调试单元测试并从REPL查询它,它似乎没有连接StyleId属性,因为app.Query(c => c.Marked("Test"))返回零结果。

我希望在测试范围内运行时看到应用程序的控制台输出 - 但它似乎不会向“应用程序输出”窗口或“测试结果”窗口输出任何内容(输出切换为打开)... < / p>

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

2 个答案:

答案 0 :(得分:2)

今天进入这个;有一种比手动更简单的解决方法&#34;文件 - &gt;重置模拟器&#34;那就是配置你的[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();
}

答案 1 :(得分:1)

阿-HA!我有一种感觉,当我第一次看到这个问题时就是这样,但感谢question asked here我能够找到解决这个问题的方法。

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

在上面链接的问题中,我看到有人注意到你需要进入iOS模拟器并点击'iOS模拟器 - &gt;重置内容和设置'然后它将删除我的缓存应用程序。我重建了,现在看起来一切正常。

这引起了我的兴趣,因为当它通过Xamarin Studio中的Unit Tests窗口启动时似乎只有这个问题 - 如果直接运行或调试应用程序(不在单元测试范围内)它不会缓存应用。但是,如果您通过“单元测试”窗口重新启动应用程序,它将返回并再次使用缓存的应用程序。

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