基于我之前的qu-如何使用Selenium Java从下拉列表中对每个值执行一些操作?

时间:2018-10-04 11:12:05

标签: selenium selenium-webdriver

现在,我想从下拉列表中选择第一个值,然后对其执行一些操作,然后我想从相同的下拉列表中选择第二个值,并对其执行相同的操作。 这是我的代码:

WebElement bldgs=Fn_GetWebElement(CreateSSIObject.getProperty("Bldgselect"));
Select  Bldg_select=new Select(bldgs);

List<WebElement> dropdownvalues = Bldg_select.getOptions();

int count=dropdownvalues.size();

System.out.println("Total number of values are :"+count);

for(int i=1;i<count;i++) {

  if(dropdownvalues.get(i).isEnabled()) {
    Bldg_select.selectByIndex(i);

    System.out.println("Not Working :"+i);

    waitForWebPagetoLoad(2000);

    WebElement search_BTN=Fn_GetWebElement(CreateSSIObject.getProperty("search_Btn"));
    fn_Click(search_BTN);


    WebElement  add_VEND=Fn_GetWebElement(CreateSSIObject.getProperty("add_vendors"));
    fn_Click(add_VEND);

    WebElement  vendorName=Fn_GetWebElement(CreateSSIObject.getProperty("vendor_Name"));
    fn_Click(vendorName);

    vendorName.sendKeys(vendor);

    waitForWebPagetoLoad(5000);

    WebElement  search_BTN1=Fn_GetWebElement(CreateSSIObject.getProperty("search_Btn"));
    fn_Click(search_BTN1);

    WebElement  selectVendor=Fn_GetWebElement(CreateSSIObject.getProperty("select_Vendor"));
    fn_Click(selectVendor);

    WebElement  addToSite=Fn_GetWebElement(CreateSSIObject.getProperty("AddTo_Site"));
    fn_Click(addToSite);

    }
}

在这里,我正在寻找一个元素(基本上是下拉ID),然后使用带有i for循环的selectbyindex选择每个值。然后我单击一个按钮,并对它执行更多操作。现在,它仅选择第一个值并进行上述所有操作。但是选择第二个值并执行相同的步骤并不会返回for循环。

2 个答案:

答案 0 :(得分:0)

能否请您尝试以下解决方案?我不确定您是tryig根据选择执行什么操作,但是我认为以下代码可以解决您的问题。

     Select drpCountry = new Select(driver.findElement(By.name("Locator")));

        List <WebElement> elementCount = drpCountry.getOptions();
        int iSize = elementCount.size();

        for(int i =0; i<iSize ; i++)
        {
            String sValue = elementCount.get(i).getText();
            System.out.println(sValue);
            drpCountry.selectByIndex(i);

                    if(sValue.equalsIgnoreCase("Selection1")){  
                    //code to be executed if condition1 is true  
                    }else if(sValue.equalsIgnoreCase("Selection2")){  
                    //code to be executed if condition2 is true  
                    }  
                    else if(sValue.equalsIgnoreCase("Selection3")){  
                    //code to be executed if condition3 is true  
                    }  

                    else{  
                    //code to be executed if all the conditions are false  
                    }  
        }

答案 1 :(得分:0)

我不太了解您的问题,但我发现有2个问题可能会使您感到困惑。

索引应从0开始

您的循环从i设置为1开始。由于列表是从零开始的索引,因此您应该从0开始

引用过时的元素?

您要在循环外部提取下拉列表值,然后使用索引在循环内部引用它们。但是,每次迭代中您都会执行很多动作和事件。

您最好在每次迭代中再次提取值,以确保所有引用都是最新的并且没有陈旧。