Как сохранить WebElements в массиве

#java #selenium #selenium-webdriver #webdriver

#java #selenium #selenium-webdriver #webdriver

Вопрос:

Я просто хотел знать, как сохранить следующие WebElements в массиве.

  WebElement NameLbl = driver.findElement(By.xpath("//h3[contains(text(),'Name')]"));
            WebElement MobLbl = driver.findElement(By.xpath("//h3[contains(text(),'Mobile')]"));
            WebElement LookingLbl = driver.findElement(By.xpath("//h3[contains(text(),'Looking for ')]"));
            WebElement GenderLbl = driver.findElement(By.xpath("//h3[contains(text(),'Gender')]"));
            WebElement MandatoryList = driver.findElement(By.xpath("//span[contains(text(),'*')]"));
  

Я пытаюсь сохранить это, используя строку ниже, но она выдает ошибку.

 List<WebElement> ExpList=new ArrayList<WebElement>() {NameLbl,MobLbl,LookingLbl,GenderLbl};
  

Комментарии:

1. Какую ошибку он вам показывает?

Ответ №1:

Вы не можете создавать экземпляры подобных списков.

То, к чему вы, вероятно, стремились, было вот к чему:

 List<WebElement> ExpList = List.of(NameLbl, MobLbl, LookingLbl, GenderLbl);
  

Который преобразует переданные вами аргументы в правильный тип списка.

Комментарии:

1. Спасибо, это работает . Не могли бы вы, пожалуйста, объяснить, что я делал не так, а также что делает List.of() ?

2. Я предполагаю, что вы пробовали метод инициализации коллекции с использованием массива, т. Е. int[] arr = {0, 1, 2} , Но это синтаксически неверно для списков. List.of возвращает список, содержащий элементы, которые вы ему передаете, и того же типа, что и элементы. Я предполагаю, что если элементы разных типов, это вызывает ошибку, но не цитируйте меня по этому поводу 🙂

Ответ №2:

Я бы предложил другой подход..

Вы можете использовать подход, предложенный Robo Mop, однако это не позволит вам изменить этот список позже. Предположим, у вас есть код:

 List<Object> objectList = Arrays.asList(new Object(), new Object());
objectList.add(new Object());
System.out.println(objectList);
  

Приведенный выше код вызовет исключение

Исключение в потоке «main» java.lang.Исключение UnsupportedOperationException в java.base/java.util.AbstractList.add(AbstractList.java:153) в java.base/java.util.AbstractList.добавить(AbstractList.java:111)

Вместо этого я бы предложил использовать эту оценку:

 List<Object> objectList = Stream.of(new Object(), new Object()).collect(Collectors.toList());
objectList.add(new Object());
System.out.println(objectList);
  

Это создало бы ArrayList объект, подобный тому, который вы делаете в своей пробной версии.