2015-09-17 8 views
4

Je travaille avec le sélénium et j'utilise la fonction FindElements, donc j'obtiens un élément qui implémente l'interface IReadOnlyCollection. Je veux parcourir la liste mais il semble que IReadOnlyCollection n'ait aucune méthode comme Get (int index) ou une implémentation de l'opération [].Comment puis-je accéder à un élément d'un IReadOnlyCollection à travers cet index?

Je veux éviter de transformer le résultat en liste ou en tableau car je veux juste accéder aux éléments pour les lire.

Actuellement, je ne veux pas utiliser foreach car j'ai besoin de gérer un index pour pouvoir ajouter ces éléments à un autre tableau.

C'est ce que je veux faire:

public void fillMatrix(){ 
    IReadOnlyCollection<IWebElement> rows = Driver.FindElements(By.XPath("./*/tr"));    
     IReadOnlyCollection<IWebElement> elements; 
     matrix = new IControl[rows.Count()][]; 
     for(int i = 0; i < matrix.Count(); ++i){ 
      matrix[i] = rows[i].FinElements("./td").toArray();     
     }  
} 

Merci

+0

'new IControl'. il n'y a pas de contructeurs sur les interfaces –

Répondre

7

Je n'ai pas été à l'aide en lecture seule collections, mais de la documentation MSDN, il semble que il est possible d'obtenir l'élément à l'index donné, en utilisant ElementAt méthode. Il devrait fonctionner comme ça:

IReadOnlyCollection<IWebElement> rows = Driver.FindElements(By.XPath("./*/tr")); 

int index = 1; // sample 

var row = rows.ElementAt(index) 

Vous pourriez avoir besoin d'ajouter la déclaration using System.Linq; dans votre classe, parce que ElementAt() est une méthode d'extension fournie par Linq.

+0

Merci beaucoup Je n'ai pas vu cette méthode :) merci – Yoiku