编码 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);
  1. 右键单击解决方案名称(在右侧的解决方案资源管理器中 side) -> 添加 -> 新项目 -> 这将打开 "Add New Item - Solution Items" 对话框。
  2. Select "Test Settings" 在左侧面板的 "Installed" 下。
  3. 现在 select 中间窗格中的 "Test Settings" 文件并提供一个有意义的名称并单击添加按钮
  4. 这将打开 "Test Settings" 向导
  5. Select "Deployment" 来自左侧窗格(从上数第 4 个)
  6. 这将使您能够 "Specify directories and files in addition to the target assemblies"。为此,首先选中 "Enable Deployment" 复选框。
  7. 现在通过 windows 浏览器导航至您的 "Solution Directory"。即,这是 .csproj 文件所在的目录。
  8. 现在进一步导航到 bin/Debug 文件夹。在 Debug 文件夹中,为您要测试的区域性(语言环境)创建文件夹。例如 "en-US"、"fr-FR" 等
  9. 现在回到您在 "Test Settings" 向导处停止的步骤。
  10. 按 "Add Directory" 按钮并浏览到您在第 8 步中创建的文化文件夹(一个接一个)并将它们添加到此处。
  11. 现在关闭向导。
  12. 现在通过 windows 资源管理器导航到测试设置文件,并通过记事本或记事本++等文本编辑器打开它。 (记住这个文件的扩展名为 .testsettings)
  13. 文件将包含类似于下面的内容

<Deployment>
  <DeploymentItem filename="RegressionTest_Solution\bin\Debug\fr-FR\" />
  <DeploymentItem filename="RegressionTest_Solution\bin\Debug\en-US\" />
</Deployment>

  1. 将其更新为以下内容

<Deployment>
  <DeploymentItem filename="RegressionTest_Solution\bin\Debug\fr-FR\" outputDirectory="fr-FR\" />
  <DeploymentItem filename="RegressionTest_Solution\bin\Debug\en-US\" outputDirectory="en-US\" />
</Deployment>

  1. 保存并关闭文件。

  2. 现在 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" 文件夹中创建的。