Вот преобразование:
Преобразование "wait"
Здесь Java и Scala довольно похожи.Просто отметьте, что:
- Scala использует
[]
для генериков вместо Java <>
. - Версия Scala
SomeClass.class
равна classOf[SomeClass]
.
Java:
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
Scala:
val wait = new FluentWait[WebDriver](driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(classOf[NoSuchElementException])
Преобразование "foo"
Это хорошее место, чтобы проиллюстрировать сходство между функциональным стилем Java и Scala. Я перевожу ваш пример в функциональный стиль в Java ииспользуя var
, который был представлен в Java 10. Версия Scala очень и очень похожа на этот стиль.
Ваша Java:
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
Java в стиле функции с выводом локального типа (JDK 10 +):
var foo = wait.until(driver -> driver.findElement(By.id("foo")));
Scala:
val foo = wait.until(driver => driver.findElement(By.id("foo")))
В Scala _
canиспользоваться вместо явного имени параметра в вызове функции.Это выбор стиля, но вы также можете написать приведенный выше код Scala следующим образом:
val foo = wait.until(_.findElement(By.id("foo")))