2015-08-13 4 views
0

У меня есть список строк в таблице, и я хочу сделать другой список с определенными строками из первого списка.C# Selenium 2: сделать IList из другого IList

Мой код:

public IWebElement InvoiceTable { get { return Driver.FindElement(By.Id("MainContent_gvInvoices")); } } 
public IList<IWebElement> InvoiceRows { get { return InvoiceTable.FindElements(By.CssSelector("tbody tr")); } } 
public IList<IWebElement> ACInvoiceRows { get; set; } 

public void test() 
{ 
    foreach(IWebElement row in InvoiceRows) 
    { 
     if(row.Text.Contains("AC")) 
     { 
      ACInvoiceRows.Add(row); 
     } 
    } 
    Console.WriteLine(ACInvoiceRows.Count); 
} 

Это бросает NullReferenceExcpetion:

объекта не задана ссылка на экземпляр объекта.

Что я здесь делаю неправильно?

ответ

0

В следующей строке вы не проверяете, есть ли row.Textnull или нет.

if (row.Text.Contains("AC")) 

если row.Text является null, вы будете в конечном итоге с NullReferenceException. Сделайте это вместо этого, чтобы проверить корпус null.

if (row.Text != null && row.Text.Contains("AC")) 

EDIT:

Это также возможно, что ACInvoiceRows не установлен. Если это не так, вы не можете использовать его, пока вы не назначите фактический объект к нему, например:

public void test() 
{ 
    //Initiate the collection before using it. 
    ACInvoiceRows = new List<IWebElement>(); 

    foreach(IWebElement row in InvoiceRows) 
    { 
     if(row.Text.Contains("AC")) 
     { 
      ACInvoiceRows.Add(row); 
     } 
    } 
    Console.WriteLine(ACInvoiceRows.Count); 
} 
+0

Ни одна из строк не является пустой. Так что это не проблема (конечно, я попробовал ваше предложение, но такое же исключение нулевого указателя). – Atit

+0

Я не сказал, что строка может быть пустой. Я сказал, что свойство Text строки может быть пустым (null). Тем не менее, это может помочь, если вы включили трассировку стека вашего исключения, чтобы сузить область, где происходит нулевое разыменование. –

+0

Его появление в ACInvoiceRows.Add (строка); line – Atit

0

Убедитесь, что вы инициализирован ваш драйвер следующим образом:

IWebDriver Driver = new ChromeDriver();