2010-12-09 4 views
4

Avec Scala 2.8.1, SBT 0.7.4, WebDriver HTMLUnit 2.6. Dans le REPL console SBT ...Scala REPL onglet complet me ment?

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 sont ajoutées par moi dans le but d'illustrer la complétion)

Ainsi, le REPL me dit que findElementByXPath(String):WebElement existe sur e, mais quand j'invoque ça, c'est pas trouvé. Ce qui donne?

Répondre

3

Voir ici:

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 

Ainsi, m2 apparaît même si vous ne pouvez pas l'utiliser parce qu'il est protégé et m4 apparaît même si vous ne pouvez pas l'utiliser (sans coulée ou correspondance) parce que le type x est X, et m4 est de classe Y (le class réel, pas type, de).

Question suivante: est-ce intentionnel? Eh bien, pas vraiment, mais il y a des choses de priorité plus élevée à corriger. Les patchs sont bien sûr les bienvenus. :-)

+0

J'aimerais voir au moins la source. Où puis-je partir d'ici ... http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk – Synesso

+0

@Sorry, je ne comprends pas votre commentaire. Tu veux dire la source de Scala? De là, vous allez à 'src', et en dessous vous pouvez trouver différentes parties de Scala: le compilateur, la bibliothèque, etc. Maintenant que vous le mentionnez, je ne suis pas sûr où se trouve REPL ... Si vous descendez le chemin du compilateur vous trouverez un répertoire 'nsc'. Ses sous-répertoires 'interactive' et' interpreter' semblent particulièrement pertinents, ainsi que certains fichiers du répertoire 'nsc'. –

+0

Merci. Désolé d'être vague. C'était en réponse à votre "Patches sont les bienvenus". Je ne m'engagerai pas dans ce sens, mais je suis intéressé à revoir la source pour voir si je peux en faire la tête ou la queue. Jetant un coup d'œil, je pense que cela revient à def typeMembers sur http://lampsvn.epfl.ch/svn-repos/scala/scala/branches/scala-detach/src/compiler/scala/tools/nsc/interactive/ Global.scala - Je ne peux pas être sûr cependant. – Synesso

3

Notez que org.openqa.selenium.WebElement ne possède pas ces méthodes, mais les classes l'implémentant comme org.openqa.selenium.htmlunit.HtmlUnitWebElement le font.

Ma meilleure estimation est que l'onglet achèvement affiche tous les publics (ou protégés, voir la réponse de Daniel) les méthodes de la classe de e, mais le type de la variable est org.openqa.selenium.WebElement, de sorte que ces méthodes ne peut réellement être appelé .

+0

Oui, vous devez utiliser e.findElement (By.xpath ("/ td ​​[0]")) –

Questions connexes