试图通过多个属性搜索元素

时间:2014-10-24 21:52:57

标签: java selenium-webdriver

我为硒测试编写了一段代码

这个想法是通过不同的属性搜索元素,一旦他通过任何属性找到了元素,就会采取行动,我尝试了几种方法,但没有一种是优化的

第一种方式:

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));
}

并且它也不能像这样连接任何想法?

1 个答案:

答案 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)定位器策略。