2012-01-11 3 views
8

Хорошо, я совершенно не знаю: У меня есть таблица на странице, где у каждой строки есть индекс CSS, увеличиваемый на один. И я ищу идентификатор аукциона в такой таблице и сопоставляю его с аукционом, который я ввел в предыдущем тесте Selenium. Поэтому мой код выглядит следующим образом:WebDriver getText исключает исключения

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

Где «auctionID» отправляется методу предыдущим тестом.

auctionRow является Webelement представлена ​​двумя пролетами, где хранится фактическая auctionID

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

Всего строк кликабельна, поэтому после того, как я отправить нажмите() команду, она будет открыта мне найденную аукцион

Что странно: auctionRow.getText(); вызывает ошибку.

Если я изменить его на getTagName() функция будет правильно вернуть меня «пролет»

Как заставить его предоставить мне текст между двумя пролетами?

Stak Трассировка:

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) 

решаемые Хорошо, я нашел хороший и легкий (и короче кода) обходной путь. Так как я знаю, что ID аукциона в поверочном элементе Я знаю, что идентификатор должен быть, я теперь поиск по 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

Рад, что вы это решили, в качестве примечания я бы рекомендовал использовать последнюю версию Selenium (2.16.1 в последний раз, когда я проверил) из вашей трассировки стека, похоже, что вы используете 2.0rc3. Иногда странными ошибками могут быть ошибки, которые с тех пор были исправлены. – prestomanifesto

ответ

0

Вместо того, чтобы сделать это:

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

Я хотел бы попробовать что-то например:

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

Или какая-то подобная идея, в зависимости от того, что вы делаете.

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