2017-03-28 12 views
1

私は以下の図のようにドロップダウンを持っています。その "More ..."オプションをクリックすると、次の10個のデータが読み込まれます。次のクリックでさらに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()); 

        } 
        } 

私は、ページ内のリストをクリックしてロードすることができonce..but anothe対象に、新たにロードされたリストをコピーすることはできませんよ。 options2.size()は、古い配列リストが再び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> 

は当初、これは "もっと" 他のオプションは次のように、ロードされているクリックthere.Onされます。あなたはあなたのようにすべての要素を格納できる、ということで行わたら

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

} 

:ドロップダウンで発生したすべてのMoreオプションをクリックし、次のメソッドを使用することができます

<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

あなたは同じものをhtmlで投稿できますか? – kushal

+0

@kushalツ私はHTML – aswathy

+0

を追加しました。 'Select select = new Select(driver.findElement(By.id(" close "))); while(select.getOptions()。contains( "More")){ select.selectByVisibleText( "More ..."); } リスト options = select.getOptions(); ' – kushal

答えて

1

:そのちょうど他のオプションよりも余分なタイトルを持ちます以下:

List<WebElement> options= select.getOptions(); 
関連する問題