java - WebDriver getText arroja excepciones
exception selenium (1)
De acuerdo, no tengo ni idea: tengo una tabla en la página donde cada fila tiene una 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. Entonces mi código es así:
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 mediante una prueba previa.
auctionRow es Webelement representado con dos tramos donde se almacena el auctionID real
<span id="mainForm:aucPanelId:0:listOfAuctions:0">116</span>
Se puede hacer clic en toda la fila, así que después de enviar el comando click () , se abrirá la subasta encontrada
Lo que es extraño: auctionRow.getText (); arroja un error.
Si lo cambio a la función getTagName () me devolverá correctamente "span"
¿Cómo lo obligo a proporcionarme el texto entre dos tramos?
Stak 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)
SOLUCIONADO Bien, encontré una solución fácil y fácil (y más corta para el código). Como sé que el ID de la subasta está en el elemento span y sé cuál debe ser el ID, 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);
}
En lugar de hacer esto:
getDriver().findElement(By.xpath("//span[text()=''"+auctionID+"'']"));
Intentaré algo como esto:
By auctionList = By.xpath(".//span[contains(@id,''listOfAuctions'')]"));
By containsTextWithId = By.xpath(".//span[contains(.,''" + id + "'')]"));
By combinedLocator = new ByChained(auctionList, containsTextWithId);
O alguna idea similar, dependiendo de lo que estés haciendo.