2010-12-09 2 views
4

С Scala 2.8.1, SBT 0.7.4, WebDriver HTMLUnit 2.6. В консоли РЕПЛ SBT ...Scala REPL tab-complete - это мне?

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 добавлены мною для целей иллюстрации автодополнению)

Итак, РЕПЛ говорит мне, что findElementByXPath(String):WebElement существует на e, но когда я призываю его, он не найден. Что дает?

ответ

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

scala> x. 

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

Так, m2 появляется, даже если вы не можете использовать его, потому что он защищен, и m4 появляется, даже если вы не можете использовать его (без литья или соответствия) поскольку x имеет тип X и m4 имеет класс Y (фактический class, а не type, x).

Следующий вопрос: это умышленное? Ну, не совсем, но есть проблемы с более высоким приоритетом. Патчи приветствуются, конечно. :-)

+0

Я бы хотел увидеть источник как минимум. Куда я иду отсюда ... http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk – Synesso 2010-12-10 10:29:44

3

Обратите внимание, что org.openqa.selenium.WebElement не имеет этих методов, но классы, реализующие его, как org.openqa.selenium.htmlunit.HtmlUnitWebElement do.

Мое предположение, что закладки завершение показывает все открытые (или защищенные, см ответа Даниила) методы e «s класса, но тип переменной org.openqa.selenium.WebElement, поэтому эти методы не могут на самом деле можно назвать ,

+0

Да, вы должны использовать e.findElement (By.xpath ("/ td ​​[0]")) – 2010-12-09 16:45:09

 Смежные вопросы

  • Нет связанных вопросов^_^