2012-01-11 2 views
8

Bon, je suis complètement désemparé: J'ai une table sur la page où chaque ligne a un identifiant CSS incrémenté de un. Et je recherche l'identifiant de l'enchère dans ce tableau et je l'associe à l'enchère que j'ai saisie par le test Selenium précédent. Donc, mon code va comme ceci:WebDriver getText jette des exceptions

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(); 
    } 

Où "auctionID" est envoyé à la méthode par le test précédent.

auctionRow est Webelement représenté par deux travées où la auctionID réelle est stocké

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

ligne entière est cliquable, donc après que j'envoie le clic () commande, il me ouvrir trouvées

Ce qui est étrange: Le auctionRow.getText(); génère une erreur.

Si je change à getTagName() fonction il correctement me retourner « span »

Comment ça que je force de me fournir le texte entre deux travées?

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) 

RESOUDRE Ok, je l'ai trouvé agréable et facile (et plus court au code) solution de contournement. Depuis que je sais que l'ID d'enchères est dans l'élément span un Je sais ce que l'ID devrait être, je suis maintenant à la recherche par 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

Heureux que vous l'ayez résolu, en guise de remarque, je vous recommande d'utiliser la dernière version de Selenium (2.16.1 la dernière fois que j'ai vérifié) de votre trace de pile il semble que vous utilisez 2.0rc3. Parfois, des erreurs étranges peuvent être des bugs qui ont été corrigés depuis. – prestomanifesto

Répondre

0

au lieu de le faire:

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

Je voudrais essayer quelque chose comme ceci:

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

Ou une idée similaire, selon ce que vous faites.

Questions connexes