Scala 此为隐式参数-找不到参数的隐式值
我一直试图在Selenium ScalaTest规范中将Scala 此为隐式参数-找不到参数的隐式值,scala,implicit,scalatest,Scala,Implicit,Scalatest,我一直试图在Selenium ScalaTest规范中将WebBrowser作为隐式参数传递,但失败了。我有一个用于所有测试的基本超类: abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers { implicit val webDriver: WebDriver = new FirefoxDriver } 然后我有一个页面对象,它有一个implictWebBrowser参数的方法: objec
WebBrowser
作为隐式参数传递,但失败了。我有一个用于所有测试的基本超类:
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit val webDriver: WebDriver = new FirefoxDriver
}
然后我有一个页面对象,它有一个implictWebBrowser
参数的方法:
object LoginPage extends Page {
def login(username: String, password: String) (implicit browser : WebBrowser ) = {
//...
}
然后我想从实际规范中调用login
方法。由于规范类通过其BaseSpec
超类实现WebBrowser
特性,我希望调用该方法的规范实例被解析为隐式WebBrowser:
class LoginSpec extends BaseSpec {
it("Should fail on invalid password") {
LoginPage login("wrong username", "wrong password")
assertIsOnLoginPage()
}
}
但此操作失败,出现编译错误:
找不到参数浏览器的隐式值:org.scalatest.selenium.WebBrowser
联机登录页面登录(“错误的用户名”、“错误的密码”)
我是否总是需要显式地提供
此
作为WebBrowser
参数值,还是有更好的方法?在类LoginSpec
中创建隐式val,如下代码所示:
trait WebBrowser
class WebDriver
class FunSpec
trait ShouldMatchers
class FirefoxDriver extends WebDriver
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit val webDriver: WebDriver = new FirefoxDriver
}
trait Page
object LoginPage extends Page {
def login(username: String, password: String)(implicit browser: WebBrowser) = {
println(username, password)
}
}
class LoginSpec extends BaseSpec {
implicit val browser: WebBrowser = this
def fun = {
LoginPage login("wrong username", "wrong password")
}
}
object ImplicitThis {
def main(args: Array[String]) {
new LoginSpec().fun
}
}
这可以编译并正常工作。在
类LoginSpec中创建一个隐式val,如下代码所示:
trait WebBrowser
class WebDriver
class FunSpec
trait ShouldMatchers
class FirefoxDriver extends WebDriver
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit val webDriver: WebDriver = new FirefoxDriver
}
trait Page
object LoginPage extends Page {
def login(username: String, password: String)(implicit browser: WebBrowser) = {
println(username, password)
}
}
class LoginSpec extends BaseSpec {
implicit val browser: WebBrowser = this
def fun = {
LoginPage login("wrong username", "wrong password")
}
}
object ImplicitThis {
def main(args: Array[String]) {
new LoginSpec().fun
}
}
这可以编译并正常工作。在类LoginSpec中创建一个隐式val,如下代码所示:
trait WebBrowser
class WebDriver
class FunSpec
trait ShouldMatchers
class FirefoxDriver extends WebDriver
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit val webDriver: WebDriver = new FirefoxDriver
}
trait Page
object LoginPage extends Page {
def login(username: String, password: String)(implicit browser: WebBrowser) = {
println(username, password)
}
}
class LoginSpec extends BaseSpec {
implicit val browser: WebBrowser = this
def fun = {
LoginPage login("wrong username", "wrong password")
}
}
object ImplicitThis {
def main(args: Array[String]) {
new LoginSpec().fun
}
}
这可以编译并正常工作。在类LoginSpec中创建一个隐式val,如下代码所示:
trait WebBrowser
class WebDriver
class FunSpec
trait ShouldMatchers
class FirefoxDriver extends WebDriver
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit val webDriver: WebDriver = new FirefoxDriver
}
trait Page
object LoginPage extends Page {
def login(username: String, password: String)(implicit browser: WebBrowser) = {
println(username, password)
}
}
class LoginSpec extends BaseSpec {
implicit val browser: WebBrowser = this
def fun = {
LoginPage login("wrong username", "wrong password")
}
}
object ImplicitThis {
def main(args: Array[String]) {
new LoginSpec().fun
}
}
这可以编译,并且工作正常
由于spec类通过其BaseSpec超类实现WebBrowser特性,我希望调用该方法的spec实例被解析为隐式WebBrowser
此
不能自动作为隐式函数使用,但您可以轻松添加它:
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit def webBrowser: WebBrowser = this
implicit val webDriver: WebDriver = new FirefoxDriver
}
由于spec类通过其BaseSpec超类实现WebBrowser特性,我希望调用该方法的spec实例被解析为隐式WebBrowser
此
不能自动作为隐式函数使用,但您可以轻松添加它:
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit def webBrowser: WebBrowser = this
implicit val webDriver: WebDriver = new FirefoxDriver
}
由于spec类通过其BaseSpec超类实现WebBrowser特性,我希望调用该方法的spec实例被解析为隐式WebBrowser
此
不能自动作为隐式函数使用,但您可以轻松添加它:
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit def webBrowser: WebBrowser = this
implicit val webDriver: WebDriver = new FirefoxDriver
}
由于spec类通过其BaseSpec超类实现WebBrowser特性,我希望调用该方法的spec实例被解析为隐式WebBrowser
此
不能自动作为隐式函数使用,但您可以轻松添加它:
abstract class BaseSpec extends FunSpec with WebBrowser with ShouldMatchers {
implicit def webBrowser: WebBrowser = this
implicit val webDriver: WebDriver = new FirefoxDriver
}