2016-04-19 23 views
0

リストボックスからすべての値を選択したいとします。リストボックスからSelenium C#を使用してすべての値を選択する

私は以下のコードを試しましたが、残念ながらリストボックスの最後の値を選択していません。

IWebDriver driver = new FirefoxDriver(); 
      driver.Navigate().GoToUrl("http://localhost:1479/WebPage.aspx"); 
      IWebElement dropdownElement = driver.FindElement(By.Id("ListBox1")); 
      List<IWebElement> elements = dropdownElement.FindElements(By.TagName("option")).ToList(); 
      int totalElementCount = elements.Count - 1; 
      Actions act = new Actions(driver); 
      act.ClickAndHold(elements[0]).Perform(); 
      act.MoveToElement(elements[totalElementCount]).Release().Perform(); 

ListBoxコントロール: -

<asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple"> 
     <asp:ListItem>Item1</asp:ListItem> 
     <asp:ListItem>Item2</asp:ListItem> 
     <asp:ListItem>Item3</asp:ListItem> 
     <asp:ListItem>Item4</asp:ListItem> 
     <asp:ListItem>Item5</asp:ListItem> 
     <asp:ListItem>Item6</asp:ListItem> 
     </asp:ListBox> 

出力: -

enter image description here

私はそれをリストボックスから最後の値を選択されていない理由はわかりません。誰でも助けてくれますか?

答えて

1

私はSelectElementの使用をお勧めします。これは、最も簡単な方法です選択で動作するように以下のコードを参照してください:。。

SelectElement select = new SelectElement(d.FindElement(By.Id("ListBox1"))); 
for (int i=0; i<select.Options.Count;i++) 
{ 
    select.SelectByIndex(i); 
} 
+0

すべての要素を選択したいと思います。 Urコードはドロップダウン値の状態を維持しません。つまり、最後に値 'Item6'のみを選択することを意味します。 – Aishu

+0

@Geethaまだ試しましたか? – Buaban

+0

私の悪い..私はリストボックスの複数にプロパティを設定していない..あなたのコードは正常に動作します – Aishu

0

私はあなたが1以外のすべての要素を選択しているあなたのコード

int totalElementCount = elements.Count - 1; 
    Actions act = new Actions(driver); 
    act.ClickAndHold(elements[0]).Perform(); 
    act.MoveToElement(elements[totalElementCount]).Release().Perform(); 

お知らせでこれを持っていることに気づきましたか?

int totalElementCount = elements.Count - 1; 

あなたが

int totalElementCount = elements.Count; 

にそれが動作しないことに変更した場合は? 残念ながら私のマシン(S)であなたのコードを実行する能力はありませんが、それは適切と思われます。あなたの代わりに

act.ClickAndHold(elements[elements.Count]).Perform(); 
    or 
    act.ClickAndHold(elements[elements.Count - 1]).Perform(); 

または多分これは

 for(int i = 0; i < elements.Count; i++) 
     { 
       act.ClickAndHold(elements[i]).Perform(); 
     } 

を助けるこれを言うならば、私はあなたのコードを実行し得ることを試みた..しかし、残念ながらセレンとあまりにも多くの問題 に走ったし、何が起こるか

firefox ... https://stackoverflow.com/a/8188839/1869220

私の環境を変更することはできません。申し訳ありません:(デフォルトのクリックアクションによって

+0

@Martinを - 私は1つが同様に、それがバインドされた例外のうち、インデックスを投げていることを試してみましたBecasue値は、どのようなライン 行為についてそのインデックス – Aishu

+0

によって識別されます。 ClickAndHold(elements [0])。Perform() ; これは最初の要素を選択する場所ですか? –

+0

最初の要素を選択し、それを保持する – Aishu

0

は、要素の左上隅に起こる。あなたは最後の要素の中央を試してみたいことがあります。

Integer iBottom = elements[totalElementCount].getSize().height; 
    Integer iRight = elements[totalElementCount].getSize().width; 
    actions.moveToElement(elements[totalElementCount], iRight/2, iBottom/2).release.perform(); 
関連する問題