2010-12-09 15 views
4

Mit Scala 2.8.1, SBT 0.7.4, WebDriver HTMLUnit 2.6. In der SBT-Konsole REPL ...Scala REPL Tab-Complete lügt mich an?

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 von mir hinzugefügt werden zum Zweck Tabulatorvervollständigung der Veranschaulichung)

So erzählt der REPL mir, dass findElementByXPath(String):WebElement auf e vorhanden ist, aber wenn ich rufe Es ist nicht gefunden. Was gibt?

Antwort

3

Siehe hier:

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 = [email protected] 

scala> x. 

asInstanceOf equals   getClass  hashCode  isInstanceOf m1    m2    m4 
notify   notifyAll  toString  wait 

So m2 zeigt sich, auch wenn Sie es nicht verwenden können, weil sie geschützt ist, und m4 zeigt sich, auch wenn Sie es nicht verwenden können (ohne Gießen oder matching) weil x der Typ ist X, und m4 ist der Klasse Y (die tatsächliche class, nicht type, von x).

Nächste Frage: ist das beabsichtigt? Nun, nicht wirklich, aber es gibt Dinge von höherer Priorität zu beheben. Patches sind natürlich willkommen. :-)

+0

Ich möchte die Quelle mindestens sehen. Wohin gehe ich von hier ... http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk – Synesso

+0

@Sorry, ich verstehe deinen Kommentar nicht. Du meinst Scala Quelle? Von dort aus gehst du zu 'src', und darunter findest du verschiedene Teile von Scala: den Compiler, die Bibliothek usw. Nun, da du es erwähnst, bin ich mir nicht sicher, wo sich REPL befindet ... Wenn du nach unten gehst Im Compiler-Pfad finden Sie ein 'nsc'-Verzeichnis. Seine "interaktiven" und "Interpreter" -Unterverzeichnisse scheinen von besonderer Relevanz zu sein, ebenso wie einige Dateien im Verzeichnis "nsc". –

+0

Danke. Entschuldigung, um vage zu sein. Es war als Antwort auf Ihre "Patches sind willkommen". Das bedeutet, dass ich mich nicht dazu verpflichten werde, aber ich bin daran interessiert, die Quelle zu überprüfen, um zu sehen, ob ich mich davon abwenden kann. Wenn ich einen kurzen Blick darauf werfen würde, würde ich glauben, dass es auf def typeMembers in http://lampsvn.epfl.ch/svn-repos/scala/scala/branches/scala-detach/src/compiler/scala/tools/nsc/interactive/ ankommt. Global.scala - Ich kann mir allerdings nicht sicher sein. – Synesso

3

Beachten Sie, dass org.openqa.selenium.WebElement diese Methoden nicht hat, aber Klassen, die es implementieren, wie org.openqa.selenium.htmlunit.HtmlUnitWebElement tun.

Meine beste Vermutung ist, dass Tab-Vervollständigung alle öffentlichen zeigt (oder geschützt, siehe Daniels Antwort) Methoden der e ‚s Klasse, aber der Typ der Variablen ist org.openqa.selenium.WebElement, so können diese Methoden nicht wirklich genannt werden .

+0

Ja, Sie sollten e.findElement verwenden (By.xpath ("/ td ​​[0]")) –