如何从动态加载

时间:2017-03-28 09:39:18

标签: javascript java jquery selenium drop-down-menu

我在下面的图片中有一个下拉列表。它有一个"更多..."选项点击它将加载下十个数据。在下一次点击更多时,将加载另外10个数据。同样,整个列表加载。如何在加载所有内容后访问整个列表。

enter image description here

  Select select=new Select(element);
        List<WebElement> options= select.getOptions();
int j=0;
    for(WebElement ele:options)
                {
                    str=ele.getText();
                    if(str.contains("More"))
                    {  
                     //this is to click the "More.." using selenium 
                    Actions action = new Actions(BaseClass.driver);
                    action.moveToElement(Filter.FilterApplied(),200, 0).click().build().perform();
                    Filter.FilterApplied().sendKeys(str);
                    action.moveToElement(Filter.FilterApplied()).click().build().perform(); 

                    //to assign newly loaded list to a new array
                   Select  se=new Select(Filter.FilterApplied());
                    options2=se.getOptions();
                    System.out.println("size of new list"+options2.size());

                    }
                    }

使用此代码,我可以在页面中单击并加载列表一次..但无法将新加载的列表复制到其他对象。 options2.size()给出了相同的旧arraylist大小,因为旧的数组列表再次加载到options2中。为什么会这样?新的arraylist应该加载吗? 我试着用硒。任何方法都很好..可能JQuery有一个更有效的方法??请告诉。我只需要访问最初未在页面中完全加载的列表,但在我们点击更多时加载。

HTML:

<select id="filterSel" name="filterSel" class="fixed-size" onchange="fnLoadAccountslegEnt(this.value); " onclick="closeDropDown();" size="1" style="top: 6.5px; margin: 0px; width: 58%; height: 30px;">
<option value=""></option>
<option value="a">Account:00</option>
<option value="a0">Account:0</option>
<option value="More" style="color: blue;">More...</option>
</select>  

最初会在那里。点击&#34;更多&#34;其他选项正在加载,就像这样。它的标题比其他选项更多:

<select id="filterSel" name="filterSel" class="fixed-size" onchange="fnLoadAccountslegEnt(this.value); " onclick="closeDropDown();" size="1" style="top: 6.5px; margin: 0px; width: 58%; height: 30px;">
<option value=""></option>
<option value="a">Account:00</option>
<option value="a0">Account:0</option>
<option value="a1" title="Account: 1">Account: 1</option>
<option value="a2" title="Account: 10 ">Account: 10 </option>   
<option value="More" style="color: blue;">More...</option>
</select> 

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法点击dropDown中发生的所有More选项:

public static void clickMoreDropDownElement(WebDriver driver){

    Select select=new Select(driver.findElement(By.id("filterSel")));

    //while(select.getOptions().contains("More")){

        List<WebElement> allElements = select.getOptions();

        Iterator<WebElement> itr = allElements.iterator();

        while(itr.hasNext()){

            WebElement currentElement = itr.next();


            if(currentElement.getText().equals("More...")){

                currentElement.click();

                System.out.println("Clicked More..");

                clickMoreDropDownElement(driver);
            }
        }

}

完成后,您可以按如下方式存储所有元素:

List<WebElement> options= select.getOptions();