我正在尝试将Java代码转换为scala



我想在scala中使用流利的等待和硒。但是我无法将以下代码转换为 Scala。请帮帮我。

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
        .withTimeout(30, SECONDS)
        .pollingEvery(5, SECONDS)
        .ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() 
{
  public WebElement apply(WebDriver driver) {
  return driver.findElement(By.id("foo"));
}
});

当我在 Scala 中使用它时,我得到

@BrianMcCutchon - 嗨。当我在 Scala 中使用此代码时,它会转换为以下内容,

val wait = new FluentWait[WebDriver](driver).withTimeout(30, SECONDS).pollingEvery(5, SECONDS).ignoring(classOf[Nothing])
  val foo = wait.until(new Nothing() {
    def apply(driver: WebDriver): WebElement = driver.findElement(By.id("foo"))
  })

在此代码中,未解析 val 等待。此外,没有什么似乎毫无意义

此代码应该在 Java(8 及更高版本)和 Scala(2.12 与 Java 接口 Function 进行互操作)中使用 lambda 编写,除非您有特定原因不这样做。

爪哇岛:

WebElement foo = wait.until(driver -> driver.findElement(By.id("foo")));

斯卡拉:

val foo = wait.until(_.findElement(By.id("foo")))

val foo = wait.until(driver => driver.findElement(By.id("foo")))

另外,wait应该有ignoring(classOf[NoSuchElementException]),而不是Nothing

我不是在谈论Selenium的FluentWait。对于Java中的通用流畅api,它应该有一个默认值,不是吗?在这种情况下,Scala 中的命名参数对我来说看起来更好。例如

new FluentWait(timeout = 30.seconds, polling = 5.seconds)

ignoring参数将被忽略,并将获得默认值 classOf[NoSuchElementException]

这是转换:

转换"等待"

Java和Scala在这里非常相似。请注意:

  1. Scala使用[]作为泛型,而不是Java的<>
  2. Scala的SomeClass.class版本是classOf[SomeClass]

爪哇岛:

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
    .withTimeout(30, SECONDS)
    .pollingEvery(5, SECONDS)
    .ignoring(NoSuchElementException.class);

斯卡拉:

val wait = new FluentWait[WebDriver](driver)
    .withTimeout(30, SECONDS)
    .pollingEvery(5, SECONDS)
    .ignoring(classOf[NoSuchElementException])

转换"foo"

这是说明函数式Java和Scala之间相似性的好地方 我正在将您的示例转换为Java中的函数式风格,并使用Java 10中引入的var。Scala版本与这种风格非常非常相似。

您的爪哇:

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")));

斯卡拉:

val foo = wait.until(driver => driver.findElement(By.id("foo")))

在 Scala 中,可以使用_代替函数调用中的显式参数名称。这是一个样式选择,但你也可以将上面的 Scala 代码编写为:

val foo = wait.until(_.findElement(By.id("foo")))

相关内容

  • 没有找到相关文章

最新更新