Итерировать/итерировать по списку FluentLenium в Scala

Я новичок в Scala, и у меня возникла проблема при написании теста на селен. Я получаю список webelements (для наших целей предположим, что их нельзя получить по отдельности). Список возвращается как FluentList.

Я могу работать с беглым списком для извлечения элементов с некоторыми его собственными функциями, такими как first(), но когда я пытаюсь выполнить итерацию по списку, я получаю следующую ошибку:

 value foreach is not a member of org.fluentlenium.core.domain.FluentList[org.fluentlenium.core.domain.FluentWebElement]

Из того, что я читал до сих пор, я думаю, что мне нужно каким-то образом преобразовать этот список в список Scala, но пока безуспешно.

Я на правильном пути? Или я должен подходить к этому вопросу по-другому?

Соответствующий код:

val icons = browser.$(Selectors.social_icons)

icons.foreach {
  icon.isDisplayed
}
option_text must be equalTo browser.$(Selectors.answered_question)

person Driver    schedule 07.04.2015    source источник


Ответы (1)


При работе со списками Java вы должны преобразовать их в списки Scala, чтобы использовать ожидаемые методы. У вас есть два варианта:

Явно преобразовать списки с помощью scala.collection.JavaConverters

import scala.collection.JavaConverters._
icons.asScala.foreach ...

Неявно преобразовать списки с помощью scala.collection.JavaConversions:

import scala.collection.JavaConversion._
icons.foreach ...

Хотя неявная версия явно чище, некоторые люди предпочитают явную версию, потому что она четко отмечает преобразование из Java в Scala и может помочь при отладке таинственных неявных преобразований.

Вы всегда можете проверить документы Java, чтобы узнать, какой тип ожидать. Например, документация FluentList показывает:

FluentList<E extends FluentWebElement> extends List<E> ...

Таким образом, мы можем ожидать, что Scala преобразует это в scala.List[FluentWebElement.

person Ben Reich    schedule 07.04.2015