首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FluentLenium Api中使用Specs2时出错

在FluentLenium Api中使用Specs2时出错
EN

Stack Overflow用户
提问于 2013-02-20 08:36:34
回答 1查看 441关注 0票数 1

我使用的是Scala2.10、Specs2 13.1-SNAPSHOT和Play2 Framework2.1提供的FluentLenium Api。

我的IntegrationSpec文件中有这行代码,查找一个子元素(根据FluentLenium规范):

代码语言:javascript
复制
browser.find(".myClass").find("#mySubElement") must haveSize(1)

该行导致以下编译错误:

代码语言:javascript
复制
error: type mismatch;
found   : org.fluentlenium.core.domain.FluentList[_ <: org.fluentlenium.core.domain.FluentWebElement]
required: org.fluentlenium.core.domain.FluentList[?0(in value $anonfun)] where type ?0(in value $anonfun) <: org.fluentlenium.core.domain.FluentWebElement
Note: org.fluentlenium.core.domain.FluentWebElement >: ?0, but Java-defined class FluentList is invariant in type E.
You may wish to investigate a wildcard type such as `_ >: ?0`. (SLS 3.2.10)

它是一种基于泛型的of...incompatibilty Scala/Java吗?或者是一种我不知道的正常行为?

然而,这一行(省略任何匹配器)很好地编译:

代码语言:javascript
复制
browser.find(".myClass").find("#mySubElement")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 09:04:18

haveSize匹配器要求被匹配的元素在作用域中有一个org.specs2.data.Sized类型类。java集合对应的类型类是:

代码语言:javascript
复制
implicit def javaCollectionIsSized[T <: java.util.Collection[_]]: Sized[T] = 
  new Sized[T] {
    def size(t: T) = t.size()
  }

我怀疑这里的类型推断是问题所在,你可以试着用下面丑陋的代码来驯服它:

代码语言:javascript
复制
browser.find(".myClass").
        find("#mySubElement").
        asInstanceOf[FluentList[FluentWebElement]] must haveSize(1)

或者也许

代码语言:javascript
复制
browser.find(".myClass").
        find("#mySubElement").
        asInstanceOf[Collection[_]] must haveSize(1)

代码语言:javascript
复制
import scala.collection.convert.JavaConverters._

browser.find(".myClass").
        find("#mySubElement").
        asScala must haveSize(1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14970301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档