2012-01-11 31 views
8

Bien, estoy completamente despistado: Tengo una tabla en la página donde cada fila tiene ID de CSS incrementada en uno. Y busco la identificación de la subasta en dicha tabla y la comparto con la subasta que ingresé a través de la prueba previa de Selenium. Así que mi código es el siguiente:WebDriver getText arroja excepciones

int i = 0; 
    Boolean stillHaveSomethingToSearch = true; 
    Boolean foundit = false; 

    while (stillHaveSomethingToSearch){ 
     idConstructor = "mainForm:aucPanelId:0:listOfAuctions:"+i; 

     try{ 
      auctionRow = driver.findElement(By.id(idConstructor)); 
     } catch (NoSuchElementException e){ 
      stillHaveSomethingToSearch = false; 
     } 
     if (stillHaveSomethingToSearch) { 
      foundAuctionID = auctionRow.getText(); 
      System.out.println("foundAuctionID = " + foundAuctionID); 
      if (auctionID.equals(foundAuctionID)){ 
       stillHaveSomethingToSearch = false; 
       foundit = true; 
      } 
     } 
     i++; 
    } 
    if (foundit){ 
     auctionRow.click(); 
    } 

Donde "auctionID" se envía al método por el ensayo previo.

auctionRow es WebElement representado con dos vanos donde se almacena el auctionID real

<span id="mainForm:aucPanelId:0:listOfAuctions:0">116</span> 

fila entera se puede hacer clic, por lo que después de que envíe la clic() de comandos, que me va a abrir la subasta encontrado

Lo que es extraño: auctionRow.getText(); arroja un error.

si la cambio a getTagName ( función) se correctamente mí volver "span"

¿Cómo fuerzo a mí dar el texto entre dos vanos?

Stack Trace:

org.openqa.selenium.WebDriverException: (WARNING: The server did not provide any stacktrace information) 
    Build info: version: '2.0rc3', revision: 'unknown', time: '2011-06-21 23:22:02' 
    System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_20' 
    Driver info: driver.version: RemoteWebDriver 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131) 
     at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105) 
     at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:402) 
     at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:213) 
     at org.openqa.selenium.remote.RemoteWebElement.getText(RemoteWebElement.java:117) 
     at com.deutscheboerse.testing.AuctionsPage.showAuctionID(AuctionsPage.java:63) 

SOLUCIONÓ Bueno, he encontrado agradable y fácil (y más corto que el código) solución. Como sé que el ID de la subasta es en elemento span un Yo sé lo que el número de identificación debe ser, ahora estoy buscando por XPath:

public AuctionTab showAuctionID(String auctionID){ 
    try{ 
    auctionRow = getRegulationUI().getDriver().findElement(By.xpath("//span[text()='"+auctionID+"']")); 
    }catch (NoSuchElementException e){ 
     throw new NotFoundException("Auction ID "+ auctionID+ "was not found on first page"); 
    } 
    auctionRow.click(); 
    return new AuctionTab(this); 
    } 
+6

Me alegro de que lo haya resuelto, como nota al margen, le recomendaría que utilice la última versión de Selenium (2.16.1 la última vez que lo comprobé) de su rastro de pila, parece que está usando 2.0rc3. A veces, los errores extraños pueden ser errores que desde entonces se han corregido. – prestomanifesto

Respuesta

0

lugar de hacer esto:

getDriver().findElement(By.xpath("//span[text()='"+auctionID+"']")); 

me gustaría probar algo de esta manera:

By auctionList = By.xpath(".//span[contains(@id,'listOfAuctions')]")); 
By containsTextWithId = By.xpath(".//span[contains(.,'" + id + "')]")); 
By combinedLocator = new ByChained(auctionList, containsTextWithId); 

O idea similar, dependiendo de lo que esté haciendo.

Cuestiones relacionadas