Хорошо, я совершенно не знаю: У меня есть таблица на странице, где у каждой строки есть индекс 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);
}
Рад, что вы это решили, в качестве примечания я бы рекомендовал использовать последнюю версию Selenium (2.16.1 в последний раз, когда я проверил) из вашей трассировки стека, похоже, что вы используете 2.0rc3. Иногда странными ошибками могут быть ошибки, которые с тех пор были исправлены. – prestomanifesto