Scala REPL tab-complete对我说谎?

时间:2010-12-09 05:34:08

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

使用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,但是当我调用它时,找不到它。是什么给了什么?

2 个答案:

答案 0 :(得分:3)

请注意,org.openqa.selenium.WebElement没有这些方法,但实现它的类如org.openqa.selenium.htmlunit.HtmlUnitWebElement

我最好的猜测是,tab-completion显示e的所有公共(或受保护;参见Daniel的回答)方法,但变量的类型为{{1因此,实际上无法调用这些方法。

答案 1 :(得分:3)

见这里:

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 1}}的类型为Yclass属于type类(x的实际{{1}},而不是{{1}}

下一个问题:这是故意的吗?嗯,不是真的,但有一些优先事项需要修复。当然欢迎补丁。 : - )