使用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
,但是当我调用它时,找不到它。是什么给了什么?
答案 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}}的类型为Y
,class
属于type
类(x
的实际{{1}},而不是{{1}}
下一个问题:这是故意的吗?嗯,不是真的,但有一些优先事项需要修复。当然欢迎补丁。 : - )