Scala中的WebDriver显式等待

3

如何用Scala编写Java显式等待的示例

WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(new ExpectedCondition<WebElement>(){
    @Override
    public WebElement apply(WebDriver d) {
      return d.findElement(By.id("myDynamicElement"));
    }});
2个回答

6

它看起来会非常相似。有些类型和括号可能会省略。但只要没有使用Scala功能的特殊Scala API,它看起来会像这样(可能还可以更少用点):

val driver: WebDriver = new FireFoxDriver
driver.get("http://somedomain/url_that_delays_loading")
val myDynamicElement = new WebdriverWait(driver, 10).until(
  new ExpectedCondition[WebElement] {
    override def apply(d: WebDriver) = d.findElement(By.id("myDynamicElement"))
  })

我的动态元素之前应该有一个 var/val。 - Kim Stebel
2
编译器一直抱怨,直到这行代码被修改为:override def apply(d: WebDriver) = { - annoyed
你也可以在等号后面去掉花括号,因为只有一个表达式。 - Alexey Romanov
实际上是 WebDriverWait(大写的 D)。提醒其他人:此 API 是 Selenium Support 库的一部分。 - icl7126

0

我有一个辅助类,可以在Scala中缩短和清理代码:

case class SeleniumHelper(timeOut: Int) {
  def waitFor(driver: WebDriver, f: (WebDriver) => WebElement) : WebElement = {
    new WebDriverWait(driver, timeOut).until(
     new ExpectedCondition[WebElement] {
      override def apply(d: WebDriver) = f(d)
    })
  }

  def test() = {
  val driver: WebDriver = new FirefoxDriver
  driver.get("http://www.abksystem.com")
  waitFor(driver, _.findElement(By.className("module module-Menu")))
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接