编码 UI C# - 本地化不适用于我的 Web 自动化
Coded UI C# - Localization doesn't work for my web automation
外部 Web 应用程序需要在许多区域设置上进行测试,例如fr_FR。不幸的是,出于某种原因,我仍然无法让它工作。
我创建了本地化的 .resx 文件(例如 Res_ErrorMsgs.fr-FR.resx)并将 CurrentUICulture 设置为 fr-FR,但始终检索到英文字符串。以下 4 个代码块描述了我尝试过的几个实验。没有任何效果。
在其他情况下,当外部应用程序的文化是“fr-FR”时; CodedUI 必须从相应的 RESX 文化文件 (fr-FR) 中插入测试数据(到外部应用程序的文本框)并执行测试。目前,即使我尝试更改 CodedUI 上的文化(请参阅下面的代码),它仍然会从默认的“en-GB”RESX 文件中读取测试数据。
注意:我在 Microsoft VS Enterprise 2015 / Windows 8.1 / OS 语言环境 en_GB 上通过 C# 编写编码 UI 脚本。
Code block 1
ResourceManager resourceManager = new ResourceManager("CodedUI_Regression.Utility.Res_ErrorMsgs", Assembly.GetExecutingAssembly());
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
string str = resourceManager.GetString("Err_PayServiceFeeBlank", Thread.CurrentThread.CurrentUICulture);
MessageBox.Show(str);
Code block 2
ResourceManager rm = new ResourceManager("CodedUI_Regression.Utility.Res_ErrorMsgs", typeof(Res_ErrorMsgs).Assembly);
string errMsg = String.Format("The current culture is {0}.\n{1}", Thread.CurrentThread.CurrentUICulture.Name, rm.GetString("Err_PayServiceFeeBlank"));
MessageBox.Show(errMsg);
Code block 3
ResourceManager rm1 = new ResourceManager(typeof(CodedUI_Regression.Utility.Res_ErrorMsgs));
MessageBox.Show(rm1.GetString("Err_PayServiceFeeBlank", CultureInfo.GetCultureInfo("fr-FR")));
Code block 4
ResourceManager rm2 = new ResourceManager("CodedUI_Regression.Utility.Res_ErrorMsgs", typeof(Res_ErrorMsgs).Assembly);
MessageBox.Show(rm2.GetString("Err_PayServiceFeeBlank", CultureInfo.GetCultureInfo("fr-FR")));
对我来说,好像找不到资源文件,默认回GB文化。您能否迭代可用资源以确保它正确地看到它们?
var assembly = Assembly.GetExecutingAssembly();
foreach (string s in assembly.GetManifestResourceNames())
System.Diagnostics.Debug.WriteLine(s);
- 右键单击解决方案名称(在右侧的解决方案资源管理器中
side) -> 添加 -> 新项目 -> 这将打开 "Add New Item - Solution Items" 对话框。
- Select "Test Settings" 在左侧面板的 "Installed" 下。
- 现在 select 中间窗格中的 "Test Settings" 文件并提供一个有意义的名称并单击添加按钮
- 这将打开 "Test Settings" 向导
- Select "Deployment" 来自左侧窗格(从上数第 4 个)
- 这将使您能够 "Specify directories and files in addition to the target assemblies"。为此,首先选中 "Enable Deployment" 复选框。
- 现在通过 windows 浏览器导航至您的 "Solution Directory"。即,这是 .csproj 文件所在的目录。
- 现在进一步导航到 bin/Debug 文件夹。在 Debug 文件夹中,为您要测试的区域性(语言环境)创建文件夹。例如 "en-US"、"fr-FR" 等
- 现在回到您在 "Test Settings" 向导处停止的步骤。
- 按 "Add Directory" 按钮并浏览到您在第 8 步中创建的文化文件夹(一个接一个)并将它们添加到此处。
- 现在关闭向导。
- 现在通过 windows 资源管理器导航到测试设置文件,并通过记事本或记事本++等文本编辑器打开它。 (记住这个文件的扩展名为 .testsettings)
- 文件将包含类似于下面的内容
<Deployment>
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\fr-FR\" />
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\en-US\" />
</Deployment>
- 将其更新为以下内容
<Deployment>
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\fr-FR\" outputDirectory="fr-FR\" />
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\en-US\" outputDirectory="en-US\" />
</Deployment>
保存并关闭文件。
现在 visual studio,转到测试 -> 测试设置 -> Select 测试设置文件。浏览测试设置文件并按打开。
17.) 最后在您编码的 ui 测试脚本中添加以下两行代码。请记住 "Resources" 是我的 RESX 文件的名称,它位于 "RegressionTest_Solution -> Utility" 文件夹中。
您可以将 RESX 文件放在不同的路径中。但请确保您正确引用它。 "language" 是一个变量,可以保存您要测试的当前文化。例如"en-US"
CultureInfo ci = new CultureInfo(language);
ResourceManager rm = new ResourceManager("RegressionTest_Solution.Utility.Resources", Assembly.GetExecutingAssembly());
18.) 以上 2 行代码将能够选择文化并从正确的文化文件中读取值。对我来说,默认文化文件始终是 Resources.RESX,而我拥有的美国文化文件是 Resources.en-US.resx。这也是在 "RegressionTest_Solution -> Utility" 文件夹中创建的。
外部 Web 应用程序需要在许多区域设置上进行测试,例如fr_FR。不幸的是,出于某种原因,我仍然无法让它工作。
我创建了本地化的 .resx 文件(例如 Res_ErrorMsgs.fr-FR.resx)并将 CurrentUICulture 设置为 fr-FR,但始终检索到英文字符串。以下 4 个代码块描述了我尝试过的几个实验。没有任何效果。
在其他情况下,当外部应用程序的文化是“fr-FR”时; CodedUI 必须从相应的 RESX 文化文件 (fr-FR) 中插入测试数据(到外部应用程序的文本框)并执行测试。目前,即使我尝试更改 CodedUI 上的文化(请参阅下面的代码),它仍然会从默认的“en-GB”RESX 文件中读取测试数据。
注意:我在 Microsoft VS Enterprise 2015 / Windows 8.1 / OS 语言环境 en_GB 上通过 C# 编写编码 UI 脚本。
Code block 1
ResourceManager resourceManager = new ResourceManager("CodedUI_Regression.Utility.Res_ErrorMsgs", Assembly.GetExecutingAssembly());
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
string str = resourceManager.GetString("Err_PayServiceFeeBlank", Thread.CurrentThread.CurrentUICulture);
MessageBox.Show(str);
Code block 2
ResourceManager rm = new ResourceManager("CodedUI_Regression.Utility.Res_ErrorMsgs", typeof(Res_ErrorMsgs).Assembly);
string errMsg = String.Format("The current culture is {0}.\n{1}", Thread.CurrentThread.CurrentUICulture.Name, rm.GetString("Err_PayServiceFeeBlank"));
MessageBox.Show(errMsg);
Code block 3
ResourceManager rm1 = new ResourceManager(typeof(CodedUI_Regression.Utility.Res_ErrorMsgs));
MessageBox.Show(rm1.GetString("Err_PayServiceFeeBlank", CultureInfo.GetCultureInfo("fr-FR")));
Code block 4
ResourceManager rm2 = new ResourceManager("CodedUI_Regression.Utility.Res_ErrorMsgs", typeof(Res_ErrorMsgs).Assembly);
MessageBox.Show(rm2.GetString("Err_PayServiceFeeBlank", CultureInfo.GetCultureInfo("fr-FR")));
对我来说,好像找不到资源文件,默认回GB文化。您能否迭代可用资源以确保它正确地看到它们?
var assembly = Assembly.GetExecutingAssembly();
foreach (string s in assembly.GetManifestResourceNames())
System.Diagnostics.Debug.WriteLine(s);
- 右键单击解决方案名称(在右侧的解决方案资源管理器中 side) -> 添加 -> 新项目 -> 这将打开 "Add New Item - Solution Items" 对话框。
- Select "Test Settings" 在左侧面板的 "Installed" 下。
- 现在 select 中间窗格中的 "Test Settings" 文件并提供一个有意义的名称并单击添加按钮
- 这将打开 "Test Settings" 向导
- Select "Deployment" 来自左侧窗格(从上数第 4 个)
- 这将使您能够 "Specify directories and files in addition to the target assemblies"。为此,首先选中 "Enable Deployment" 复选框。
- 现在通过 windows 浏览器导航至您的 "Solution Directory"。即,这是 .csproj 文件所在的目录。
- 现在进一步导航到 bin/Debug 文件夹。在 Debug 文件夹中,为您要测试的区域性(语言环境)创建文件夹。例如 "en-US"、"fr-FR" 等
- 现在回到您在 "Test Settings" 向导处停止的步骤。
- 按 "Add Directory" 按钮并浏览到您在第 8 步中创建的文化文件夹(一个接一个)并将它们添加到此处。
- 现在关闭向导。
- 现在通过 windows 资源管理器导航到测试设置文件,并通过记事本或记事本++等文本编辑器打开它。 (记住这个文件的扩展名为 .testsettings)
- 文件将包含类似于下面的内容
<Deployment>
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\fr-FR\" />
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\en-US\" />
</Deployment>
- 将其更新为以下内容
<Deployment>
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\fr-FR\" outputDirectory="fr-FR\" />
<DeploymentItem filename="RegressionTest_Solution\bin\Debug\en-US\" outputDirectory="en-US\" />
</Deployment>
保存并关闭文件。
现在 visual studio,转到测试 -> 测试设置 -> Select 测试设置文件。浏览测试设置文件并按打开。
17.) 最后在您编码的 ui 测试脚本中添加以下两行代码。请记住 "Resources" 是我的 RESX 文件的名称,它位于 "RegressionTest_Solution -> Utility" 文件夹中。 您可以将 RESX 文件放在不同的路径中。但请确保您正确引用它。 "language" 是一个变量,可以保存您要测试的当前文化。例如"en-US"
CultureInfo ci = new CultureInfo(language);
ResourceManager rm = new ResourceManager("RegressionTest_Solution.Utility.Resources", Assembly.GetExecutingAssembly());
18.) 以上 2 行代码将能够选择文化并从正确的文化文件中读取值。对我来说,默认文化文件始终是 Resources.RESX,而我拥有的美国文化文件是 Resources.en-US.resx。这也是在 "RegressionTest_Solution -> Utility" 文件夹中创建的。