4

使用 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存在 on e,但是当我调用它时,它没有找到。是什么赋予了?

4

2 回答 2

3

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

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

于 2010-12-09T07:56:30.520 回答
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's 的类型是X, 并且m4是类Y的(实际的class, not type, ) x

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

于 2010-12-09T10:41:10.023 回答