我为硒测试编写了一段代码
这个想法是通过不同的属性搜索元素,一旦他通过任何属性找到了元素,就会采取行动,我尝试了几种方法,但没有一种是优化的
第一种方式:
String identifier = x.getidentifier();
String[] myStringArray = new String[3];
myStringArray[0]= ".className";
myStringArray[1]= ".name";
myStringArray[2]= ".id";
for (int i = 0 ; i < myStringArray.length ; i++){
if (i==0){
List<WebElement> elems = driver.findElements(By.className(identifier));
}else if (i==1){
List<WebElement> elems = driver.findElements(By.name(identifier));
}else if (i==2){
List<WebElement> elems = driver.findElements(By.id(identifier));
}
if (elems.size() != 0){
break;
}
}
这个问题是它无法看到最后一个变量elems
,第二个解决方案是:
String[] myStringArray = new String[3];
myStringArray[0]= "className";
myStringArray[1]= "name";
myStringArray[2]= "id";
for (int i = 0 ; i < myStringArray.length ; i++){
List<WebElement> elems = driver.findElements(By.+myStringArray[i](identifier));
}
并且它也不能像这样连接任何想法?
答案 0 :(得分:0)
For the first code Snippet you can use this version of code
String[] myStringArray = new String[3];
List<WebElement> elems;
myStringArray[0]= ".className";
myStringArray[1]= ".name";
myStringArray[2]= ".id";
for (int i = 0 ; i < myStringArray.length ; i++){
if (i==0){
elems = driver.findElements(By.className(identifier));
}else if (i==1){
elems = driver.findElements(By.name(identifier));
}else if (i==2){
elems = driver.findElements(By.id(identifier));
}
}
if (elems.size() != 0){
break;
}
但是定位器策略应该基于用户提供的/ Scenario而不是循环索引。
您可以使用下面的代码示例来实现定位器策略。
if (strWebElementDescription.startsWith("(id)")) {
objWebElement = wait.until(ExpectedConditions
.presenceOfElementLocated(By
.id(strWebElementDescription
.replace("(id)", ""))));
strWebElementDescription可以是Xpath,id描述等,附上上面例子中的(id)定位器策略。