这个问题提到了xpaths,但它并不是特定于xpaths,而且确实与任何Java字符串有关。
我正在使用Java 8并且有大约40个字符串(类中的公共静态最终字符串)。一个例子如下:
int f = Convert.ToInt32(first);
int s = Convert.ToInt32(second);
BitArray bit = new BitArray(System.BitConverter.GetBytes(f & s));
Console.WriteLine(bit.Cast<bool>().Count(x => x));
还有一些更复杂的问题,比如
private static final String employeeID_x = "//input[@id = 'id']";
private static final String employeeName = "//input[@id = 'EmployeeName']";
等。其中有40个。我想验证所有的xpath,所以我做了一个类似
的数组private static final String age_x = "//div[@id = 'Employee']/div[2]/span[1]";
然后验证
private static final String[] arr = {employeeID_x, employeeName_x, age_x, .....};
你明白了。这有效,但错误信息是 “// div [@id ='Employee'] / div [2] / span [1]不存在”。我想这没关系,但我宁愿让它说“age_x不存在”。
我不知道如何打印变量名称。我尝试过使用Class和getFields(),但这似乎不起作用。
我要做的是复制数组并将每个元素放在引号中,如下所示:
for (String xp: arr) {
List<WebElement> eles = driver.findElement(By.xpath(xp));
if (eles.size() == 0) {
System.out.println(xp + " does not exist");
}
}
然后获取条目数并使用
private static final String[] names= {"employeeID_x", "employeeName_x", "age_x", .....};
但是你可以看到这可能会很痛苦。无论如何从xp获取名称?也许不,因为我担心它在创建数组时会替换每个字符串的值吗?
正如您所看到的,这不是特定于xpath的。
答案 0 :(得分:0)
我不知道如何打印变量名。
使用当前数组,除非可以从字符串中推断出变量名,否则不能(合理地*)。这一行:
private static final String[] arr = {employeeID_x, employeeName_x, age_x, .....};
...将employeeID_x
等的值复制到数组中。该值与它所来自的变量之间没有持续的联系,就像在这段代码中一样:
a = b;
... a
和b
之间没有正在进行的链接。
你的并行阵列解决方案有效,但正如你所说的那样并不理想。使用Map
可能稍微好一些:
private static final Map<String, String> map = new HashMap<>();
static {
map.put("employeeID_x", employeeID_x);
map.put("employeeName_x", "employeeName_x);
// ...
}
然后遍历地图的条目,这些条目为您提供名称和值。这仍然有一些重复(例如,在每个put
调用中你必须输入两次变量名称),但从维护的角度来看它要好得多:显着更难以使两者不同步。
另一个选择是使用反射:你的数组将是变量的名称,然后你通过使用Class#getDeclaredField
得到变量的值来获得Field
实例,然后通过Field#get
获取价值。例如,你的阵列将是:
private static final String[] arr = new String[] { "employeeID_x", "employeeName" /*, ...*/ };
...然后:
for (String name : names) {
Field f = YourClass.class.getDeclaredField(name);
String value = (String)f.get(null);
// ...test `value` here, report `name` if there's a problem
}
*“合理地” - 您可以使用错误代码将字符串与每个字段进行比较并报告匹配,例如
if (theString.equals(employeeID_x)) {
theVariableName = "employeeID_x";
} else if (theString.equals(employeeName_x)) {
theVariableName = "employeeName_x";
} else if (...) {
// ...
...但是... BLECH。 :-)(并假设其中两个永远不会有相同的值。)