我在下面的图片中有一个下拉列表。它有一个"更多..."选项点击它将加载下十个数据。在下一次点击更多时,将加载另外10个数据。同样,整个列表加载。如何在加载所有内容后访问整个列表。
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>
答案 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();