Xamarin Forms 未为 UITest 设置 StyleId
本文关键字:设置 StyleId UITest 未为 Forms Xamarin | 更新日期: 2023-09-27 18:34:15
我正在尝试让Xamarin Forms与UITest一起使用,但我似乎无法在iOS中设置StyleId属性(我没有Android的许可(。
我已经遵循了所有文档,这些是我到目前为止采取的步骤:
应用代表:
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 => c.Marked("Test"))
返回零结果。
我很想在测试范围内运行应用程序时看到应用程序的控制台输出 - 但它似乎没有向应用程序输出窗口或测试结果窗口(打开输出(输出任何内容......
关于我错过了什么的任何想法?
今天遇到了这个问题;有一个比手动"文件->重置模拟器"更简单的解决方法,那就是配置您的[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();
}
啊哈! 我有一种感觉,这就是我第一次开始看到这个问题时的样子,但是由于这里提出的问题,我能够找出我需要做些什么来解决这个问题。
基本上 - 我已经开始使用 UITest 创建单元测试,没有设置任何 StyleId 属性 - 然后我开始追溯并将 StyleId 属性添加到我的元素中。 发生的事情是iOS模拟器正在缓存我的应用程序,而不是使用最新版本。 我做了所有事情,从删除我所有项目中的 bin/obj 文件夹并通过 Xamarin Studio 重建它们,没有任何工作,所以我认为它是之后的 UITest 系统。
在上面链接的问题中,我看到有人注意到您需要进入iOS模拟器并单击" iOS模拟器->重置内容和设置",然后它将删除我的缓存应用程序。 我重建了,现在一切似乎都在工作。
这让我上了墙,因为它仅在通过 Xamarin Studio 中的单元测试窗口启动时才会出现此问题 - 如果您直接运行或调试应用程序(不在单元测试范围内(,它不会缓存应用程序。 但是,如果随后通过"单元测试"窗口重新启动应用程序,它将返回并再次使用缓存的应用程序。
我必须看看我是否可以在一个简单的项目中重现并提交错误。