【问题标题】:Scala REPL tab-complete is lying to me?Scala REPL tab-complete 是在骗我吗?
【发布时间】:2011-05-22 15:58:17
【问题描述】:

使用 Scala 2.8.1、SBT 0.7.4、WebDriver HTMLUnit 2.6。在 SBT 控制台 REPL ...

 scala> e.findElement[tab]

findElement                     findElementById                 findElementByLinkText           findElementByPartialLinkText
findElementByTagName            findElementByXPath              findElements                    findElementsById
findElementsByLinkText          findElementsByPartialLinkText   findElementsByTagName           findElementsByXPath

scala> e.findElementByXPath[tab]

def findElementByXPath(String): org.openqa.selenium.WebElement

scala> e.findElementByXPath("/td[0]")
<console>:12: error: value findElementByXPath is not a member of org.openqa.selenium.WebElement
       e.findElementByXPath("/td[0]")
         ^

[tab]s 是我添加的,目的是说明制表符完成)

所以,REPL 告诉我 findElementByXPath(String):WebElement 存在于 e 上,但是当我调用它时,找不到它。什么给了?

【问题讨论】:

    标签: scala webdriver read-eval-print-loop sbt tab-completion


    【解决方案1】:

    看这里:

    scala> class X {
         |   def m1 = 1
         |   protected def m2 = 2
         |   private def m3 = 3
         | }
    defined class X
    
    scala> class Y extends X {
         |   def m4 = 4
         | }
    defined class Y
    
    scala> val x: X = new Y
    x: X = Y@12524b0
    
    scala> x.
    
    asInstanceOf   equals         getClass       hashCode       isInstanceOf   m1             m2             m4
    notify         notifyAll      toString       wait
    

    所以,m2 会出现,即使你不能使用它,因为它受到保护,m4 也会出现,即使你不能使用它(没有强制转换或匹配),因为 x 的类型是X,而m4 属于Y 类(实际class,不是type,属于x)。

    下一个问题:这是故意的吗?好吧,不是真的,但有更高优先级的事情需要解决。当然,欢迎使用补丁。 :-)

    【讨论】:

    • 我想至少看看源代码。我从这里去哪里...lampsvn.epfl.ch/trac/scala/browser/scala/trunk
    • @对不起,我不明白你的评论。你是说 Scala 源码?从那里你去src,在它下面你可以找到Scala的各个部分:编译器、库等等。既然你提到了它,我不确定REPL在哪里......如果你下去您将在编译器路径中找到nsc 目录。它的interactiveinterpreter 子目录似乎特别相关,还有nsc 目录本身中的一些文件。
    • 谢谢。抱歉含糊其辞。这是对您的“欢迎使用补丁”的回应。这意味着我不会对此做出承诺,但我有兴趣查看源代码,看看我是否可以掌握它。快速浏览一下,我怀疑它归结为 lampsvn.epfl.ch/svn-repos/scala/scala/branches/scala-detach/src/… 中的 def typeMembers - 不过我不能确定。
    【解决方案2】:

    注意org.openqa.selenium.WebElement 没有这些方法,但是像org.openqa.selenium.htmlunit.HtmlUnitWebElement 这样实现它的类有。

    我最好的猜测是tab-completion 显示eclass 的所有公共(或受保护;参见Daniel 的回答)方法,但变量的类型是org.openqa.selenium.WebElement,所以这些方法实际上不能被调用。

    【讨论】:

    • 是的,你应该使用 e.findElement(By.xpath("/td[0]"))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2010-10-24
    相关资源
    最近更新 更多