【发布时间】: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