我有一个c#test,它使用selenium web驱动程序来测试网页。我有大量的元素名称和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值,因此我想在文本文件中对信息进行版本化,并在脚本中动态分配变量以匹配版本#,因此相同的代码可以测试多个版本。
例如:
我有一个变量字符串版本=&#34; v2.3&#34;或&#34; v2.4&#34;取决于我正在测试的版本。
字典中的一个键是v2.3_usernamefield,value = some xpath
另一个是v2.4_usernamefield,value =与v2.3的不同xpath
我希望能够将版本变量添加到根变量名称中,以便我可以将webdriver的变量设置为特定于版本 - 例如:
driver.findelement(By.Xpath(版本+ usernamefield))
有没有办法做到这一点?
答案 0 :(得分:0)
您似乎正在努力做Dictionary
为您做的事情。您不需要创建动态变量。您只需创建动态密钥并根据需要访问它们。
如果您只有一组密钥可供访问,那么Dictionary<string, object>
就足够了。例如:
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"} }
};