Scala中的WebDriver显式等待

Scala中的WebDriver显式等待,scala,selenium,webdriver,Scala,Selenium,Webdriver,将如何使用Scala编写: WebDriver driver = new FirefoxDriver(); driver.get("http://somedomain/url_that_delays_loading"); WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(new ExpectedCondition<WebElement>(){ @Override public

将如何使用Scala编写:

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"));
    }});
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://somedomain/url_that_delays_loading");
WebElement myDynamicElement=(新的WebDriverWait(驱动程序,10))
.直到(新的预期条件){
@凌驾
公共WebElement应用(WebDriver d){
返回d.findElement(By.id(“myDynamicElement”);
}});

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


我有一个助手类,用于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")))
  }
}

MyDynamicElement之前应该有一个var/val编译器一直抱怨直到这一行被更改:
override def apply(d:WebDriver)={
您也可以在这之后删除大括号,因为只有一个表达式。它实际上是
WebDriverWait
(大写
d
)。请注意:此API是库的一部分。
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")))
  }
}