Javascript 如何从动态加载的选择框中获取数据

Javascript 如何从动态加载的选择框中获取数据,javascript,java,jquery,selenium,drop-down-menu,Javascript,Java,Jquery,Selenium,Drop Down Menu,我有一个下拉列表,如下图所示。它有一个“更多…”选项,点击该选项将加载下十个数据。下一次单击“更多”时,将加载另外10个数据。同样,整个列表也将加载。如何在加载所有内容后访问整个列表 Select=新选择(元素); List options=select.getOptions(); int j=0; for(WebElement元素:选项) { str=ele.getText(); 如果(str.contains(“More”)) { //这是使用selenium单击“更多…” Actio

我有一个下拉列表,如下图所示。它有一个“更多…”选项,点击该选项将加载下十个数据。下一次单击“更多”时,将加载另外10个数据。同样,整个列表也将加载。如何在加载所有内容后访问整个列表

Select=新选择(元素);
List options=select.getOptions();
int j=0;
for(WebElement元素:选项)
{
str=ele.getText();
如果(str.contains(“More”))
{  
//这是使用selenium单击“更多…”
Actions action=新操作(BaseClass.driver);
action.moveToElement(Filter.FilterApplied(),200,0)。单击().build().perform();
Filter.FilterApplied().sendKeys(str);
action.moveToElement(Filter.filterApplication())。单击().build().perform();
//将新加载的列表分配给新数组的步骤
Select se=new Select(Filter.FilterApplied());
options2=se.getOptions();
System.out.println(“新列表的大小”+选项2.size());
}
}
使用这段代码,我可以单击并加载页面中的列表一次..但无法将新加载的列表复制到对象。options2.size()提供与旧数组列表再次加载到options2中时相同的旧数组列表大小。为什么会这样?新的arraylist应该正确加载吗? 这是我用硒做的。任何方法都可以。也许JQuery有一个更有效的方法??请告诉我。我只需要访问列表,它最初并没有在页面中完全加载,但会随着我们单击“更多”而加载

HTML:


帐户:00
帐户:0
更多
最初,这将在那里。点击“更多”其他选项正在加载,如下所示。除了其他选项外,它还具有标题:

<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> 

帐户:00
帐户:0
帐户:1
帐户:10
更多

您可以使用以下方法单击下拉列表中出现的所有
更多
选项:

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

}
publicstaticvoid单击更多下拉元素(WebDriver驱动程序){
Select=newselect(driver.findElement(By.id(“filterSel”));
//而(select.getOptions()包含(“更多”)){
List allegements=select.getOptions();
迭代器itr=等位基因。迭代器();
while(itr.hasNext()){
WebElement currentElement=itr.next();
if(currentElement.getText()等于(“更多…”){
currentElement.click();
System.out.println(“单击更多…”);
单击更多下拉列表元素(驱动程序);
}
}
}
完成此操作后,可以按以下方式存储所有元素:

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

你能发布同样的html吗?@kushalツ 我添加了HTMLyou可以尝试类似于
Select=newselect(driver.findElement(By.id(“close”));而(Select.getOptions().contains(“More”){Select.selectByVisibleText(“More…”);}List options=Select.getOptions();
@kushalツ 需要单击“更多”选项以进一步加载。SelectByVisibleText仅选择右侧?它没有单击“是”这是正确的;我只是想检查当您使用selenium选择“更多…”项时会发生什么,它是扩展还是被选中?
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();