如何使用Scala的Manifest类在运行时实例化被擦除的类?

2024-02-28

我正在做一些 WebDriver+PageObject 的东西。

(如果您不熟悉 PageObjects,这是一种模式,您有一个代表站点上每个页面的类,该类使用域语言公开页面的所有功能,从而隐藏测试中的 HTML 内容。)

我想偷懒,并在我的抽象 Page 类中拥有一个“提交”方法,所有其他页面都从该方法扩展。我还希望此方法新建下一个 Page 子类并返回它。

这是我在 Page 类中的内容:

def submitExpecting[P <: Page[P]](implicit m: Manifest[_]): P = {
  driver.findElement(By.xpath("//input[@type='submit']")).click
  m.erasure.getConstructor(classOf[WebDriver]).newInstance(driver).asInstanceOf[P]
}

我是这样称呼它的:

val userHomePage = userSignupPage
      .login("graham")
      .acceptTermsAndConditions
      .submitExpecting[UserHomePage]

编译这个,我得到:

error: could not find implicit value for parameter m: Manifest[_]
.submitExpecting[UserHomePage]

我以为我很聪明,但显然我并不聪明。 ;) 我究竟做错了什么?


你需要让你的Manifest与类型参数相关,即

def submitExpecting[P <: Page[P]](implicit m: Manifest[P]): P
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Scala的Manifest类在运行时实例化被擦除的类? 的相关文章

随机推荐