Как создать короткий список с WebElement внутри

1

Я получаю некоторое значение из таблицы HTML. Я могу печатать значения, но не могу определить способ, которым я могу сортировать их по алфавиту.

Код, который я used-

List<WebElement> lst = driver.findElements(By.xpath(".//*[@class='user-questions lines']/tbody/tr/td[2]"));
for(WebElement s : lst) {
    System.out.println(s.getText()); //This line prints the value
    String[] ss = new String[lst.size()];
    int i=0;
    if(s.getText() != null) {
        ss[i]=s.getText();
        System.out.println(ss[1]); // But here i am getting null
    }
    i++;
}

Сначала я попытался отсортировать его с помощью Collections.sort(lst) но получил сообщение об ошибке:

Связанное несоответствие: общий метод sort (List) типа Collections не применим для аргументов (List).

Затем я попытался поместить строковое значение внутри массива String и позже отсортировать его, но здесь я получаю значение null, когда я попытался поместить значение в массив String

  • 0
    Как WebElement не реализует Comparable интерфейс , который нужно вызвать Collections.sort(List, Comparator) метод. В вашем компараторе вам нужно определить, как сортировать WebElements.
Теги:
arrays
arraylist
sorting
selenium-webdriver

3 ответа

1

Сегодня я застрял в одном и том же, и нашел, что этот вопрос задан еще в начале этого года. Когда я попробовал решения, я получил исключение NullPointerException.

Я написал небольшой код, и теперь я могу сократить количество веб-элементов, соответствующих естественному алфавитному порядку. Вот code-

  //Here storing the WebElements in the List
  List<WebElement> lst  = driver.findElements(By.xpath("WebElement XPath"));
   //Here creating a String array
   String[] str = new String[lst.size()];
    for (int i = 0 ; i<str.length ; i++){
        str[i] = driver.findElements(By.xpath("WebElement XPath")).get(i).getText();
    }//for
    Arrays.sort(str);
    for(String strr: str){
        System.out.println(strr);
    }
    driver_1.close();
    driver_1.quit();

    }//try
    catch(Exception e){
    e.printStackTrace();    
    driver.close();
    driver.quit();  
    }//catch

Сначала я сохранил веб-элементы в списке. Затем я создал массив String для сортировки. В первом для цикла я сохранил строку, которую я получил с веб-сайта. После этого я отсортировал их с помощью метода Arrays.sort

В цикле для перехода я печатаю вывод.

Как я вижу, вопрос очень старый, и если за это время вы получите гораздо лучший ответ, пожалуйста, поделитесь им.

  • 0
    Похоже, в вашем коде отсутствует начальная try { для блока try-catch. Кстати: я бы использовал отступ вместо //for , //try и //catch комментарии в закрывающей скобке.
0

Объявите i вне цикла foreach. и sysout ss[i]. Очевидно, что при выполнении вашего первого цикла ss[1] будет null.

Другой способ:

List<WebElement> lst = driver.findElements(By.xpath(".//*[@class='user-questions lines']/tbody/tr/td[2]"));
String[] str = new String[lst.size()];
int i = 0;
for (WebElement ele : lst) {
    if(ele.getText()!=null)
        str[i] = ele.getText();
    i++;
}
Arrays.sort(str); // to sort the array of strings
0

Вы получаете null в System.out.println(ss[1]); потому как:
ss[i]=s.getText(); всегда помещается в ss[0], потому что:
до, если int i=0; , Поэтому ss[1] всегда пуст.

Чтобы решить это, положите int i=0; before for(WebElement s: lst)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню