Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как оптимальней удалить из списка строки?

csharp
selenium
webdriver
Теги: #<Tag:0x00007f7b64e797a8> #<Tag:0x00007f7b64e79668> #<Tag:0x00007f7b64e79528>

(It Ot) #1

ИСПОЛЬЗУЕТСЯ: WebDriver, С#

СЦЕНАРИЙ:
1. Переходим на сайт
2. Парсим список ссылок из элементов страницы по средствам By.CssSelector(a[href*=ibm])
3. Получаем список в котором текстовые поля некоторых позиций пустые (см. скрин).
4. Удаляем пустые позиции.

Для парсинга использую код
КОД:

List<IWebElement> link; 
      private void button1_Click(object sender, EventArgs e)
        {
            link = browser1.FindElements(By.CssSelector(a[href*=ibm])).ToList(); // собираем все ссылки со страницы в список
	}

Для удаления пустых позиций использую код
КОД:

for (int i = 0; i < link.Count; i++) 
{
  String c = link[i].Text;  
  if (c.Equals("")) 
   { 
      link.RemoveAt(i);
    }
}

Хотел попробовать удаление с помощью RemoveAll,
link.RemoveAll("");

 но выражение в скобках - "" подчёркивается красным и выдаёт ошибку:
Argument 1: cannot convert from 'string' to 'System.Predicate<OpenQA.Selenium.IWebElement>'	

ВОПРОС
1. Как удалить пустые позиции из списка с помощью “RemoveAll”?
2. Какие есть более эффективные способы для реализации данной задачи (удаление строк из списка по критерию)?


#2

Привет

Попробуй вот так

link.RemoveAll(str => String.IsNullOrEmpty(str.Text));

А на счет ошибки - у тебя же лист содержит IWebElement а не String, поэтому ты не можешь обратиться к нему вот так link.RemoveAll("");
Примерно вот так можно сделать (e.Text - yt)

for(WebElement e : link) {
  System.out.println(e.Text);
}

PS. Нет возможности проверить код, могут быть синтаксические ошибки :slight_smile:


#3

Можно использовать LINQ

links = browser1.FindElements(By.CssSelector(a[href*=ibm])).Where(x => !string.IsNullOrEmpty(x.Text)).ToList()