【问题标题】:How can I dynamically assign variables in C#如何在 C# 中动态分配变量
【发布时间】:2014-07-12 22:15:34
【问题描述】:

我有一个使用 selenium web 驱动程序测试网页的 c# 测试。我有大量元素名称和 xpath 位置存储在一个文本文件中(以便其他无法访问代码的人可以在元素的 xpath 更改时进行更新),使用数组和 File.ReadAllLines 将其读入字典,所以它看起来像这样:

Dictionary<string, string> dictionary = new Dictionary<string, string>();
// dictionary = new Dictionary<string, string>();
foreach (string line in File.ReadAllLines(fileName)) 
{
    if ((!string.IsNullOrEmpty(line)) &&
    (!line.StartsWith(";")) &&
    (!line.StartsWith("#")) &&
    (!line.StartsWith("'")) &&
    (line.Contains("=")))
{
    int index = line.IndexOf("=");
    string key = line.Substring(0, index).Trim();
    string value = line.Substring(index + 1).Trim();

    if ((value.StartsWith("\"") && value.EndsWith("\"")) ||
        (value.StartsWith("'") && value.EndsWith("'")))
    {
        value = value.Substring(1, value.Length - 2);
    }

    dictionary.Add(key, value);
    }
}

然后我定义一个变量,并将匹配键的值赋给该变量。 但是我们页面的不同版本对于相同的元素有不同的xpath值,所以我想对文本文件中的信息进行版本化,并在脚本中动态分配变量来匹配版本号,这样同样的代码可以测试多个版本。 例如:
我有一个可变字符串 version = "v2.3" 或 "v2.4",具体取决于我正在测试的版本。
字典中的键之一是 v2.3_usernamefield, value = some xpath
另一个是 v2.4_usernamefield,value = 与 v2.3 不同的 xpath

我希望能够将版本变量添加到根变量名称之前,这样我就可以将 webdriver 的变量设置为特定于版本的变量 - 例如:
driver.findelement(By.Xpath(版本+用户名字段))
有没有办法做到这一点?

【问题讨论】:

  • 为什么必须在文本文件中保留版本控制?我认为更好的方法是将文件绑定到产品版本/分支/发布,以便每个版本都有它的一组值。我觉得这会更容易管理。我还认为,从长远来看,正确键入的自定义部分会更好一些,但我不完全确定您是否可以使用它。

标签: c# variables dynamic dictionary


【解决方案1】:

您似乎正在尝试做 Dictionary 为您做的事情。您不需要创建动态变量。您只需要创建动态密钥并根据需要访问它们。

如果您只有一组密钥可以访问,那么Dictionary&lt;string, object&gt; 就足够了。例如:

var dict = new Dictionary<string, object() 
    { 
        {"UserName", "John"} , 
        {"OtherAttribute", "Value"} 
    };

如果您现在有一个要添加的版本,您可以像这样将它添加到以前的字典中:

var dict = new Dictionary<string, object() 
     { 
         {"v2.3_UserName", "John"}, 
         {"c2.4_UserName", "Kale"} 
     };

或者你可以在另一个字典中创建一个字典:

var versionDictThenKeyValueDict = 
    new Dictionary<string, Dictionary<string, Object>>()
        { 
            {"v2.3", new Dictionary<string, object> { {"UserName", "John"} } 
        };

【讨论】:

  • 好的,有帮助,谢谢。我想我试图让 out 变量也是动态的,这使我过于复杂了,但你的例子让我意识到我不需要这样做。对于任何一个版本,我都可以使用相同的变量。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多