2012-03-27 3 views
2

Я использую webdriver с firefox в Java. Я ищу элементы с помощью аннотаций, например .:Почему selenium не предоставляет никакой информации с NoSuchElementException

@FindBy(id = "terminal") 
private WebElement selectTerminal; 

позволяет сказать, что страница не делает, и по какой-то причине этого элемент не получает оказан. Сообщение об ошибке очень неясными, и если я бегу тестов на удаленном Дженкинс, его очень трудно отлаживать и посмотреть, что именно случилось, например .:

The element could not be found (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 72 milliseconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.20.0', revision: '16008', time: '2012-02-28 15:00:40' 
System info: os.name: 'Linux', os.arch: 'i386', os.version: '2.6.32-312-ec2', java.version: '1.6.0_20' 
Driver info: driver.version: RemoteWebDriver 

Как я мог бы получить более подробную информацию, которая будет содержать селектор ? Конечно, я мог бы обернуть его каким-то вспомогательным методом, с try/catch и т. Д. Но я хочу знать, почему он не отображает селектор и как я могу избавиться от этого ПРЕДУПРЕЖДЕНИЯ?

Спасибо!

+0

Кроме того, веб-страница не очень полезна. Это действительно боль, и я с нетерпением жду решения. В моем случае это был пользовательский улов, запишите селектор и сделайте снимок экрана. –

+0

Глядя на источник org.openqa.selenium.remote.ErrorHandler класс, я вижу такой комментарий, так что предположим, что это ожидаемое поведение: // Если serverError имеет значение NULL, то сервер не предоставил имя класса (только ожидалось, если // сервер - это процесс Java) или трассировка стека. Отсутствие className в порядке, но // отсутствие stacktrace действительно ушибает нашу способность отлаживать проблемы. – gerasalus

+0

У меня были подобные проблемы в PHP, а также закончились обертыванием вещей в блоке try/catch. Кажется, это единственное, что нужно ... – Potherca

ответ

0

Хотя это не идеальное решение, это помогло мне с той же проблемой.

Включить ведение журнала в файл, установив свойство системы webdriver.

-Dwebdriver.firefox.logfile=/tmp/ff.log 

или в тестовом коде:

System.setProperty("webdriver.firefox.logfile", "/tmp/ff.log") 

Тогда в ff.log вы должны увидеть, где произошла ошибка, например,

[6.389][FINE]:  Command received (/session/5a4c8a0a7ef5453467687267348e8cb3/element) with params { 
"using": "xpath", 
"value": "//input[@class='login-submit'] 
} 

[6.389][FINER]:  Waiting for all views to stop loading... 
[6.390][FINER]:  Done waiting for all views to stop loading 
[6.505][FINER]:  Waiting for all views to stop loading... 
[6.506][FINER]:  Done waiting for all views to stop loading 
[6.506][WARNING]: Command finished (/session/5a4c8a0a7ef5453467687267348e8cb3/element) with response { 
    "sessionId": "5a4c8a0a7ef5453467687267348e8cb3", 
    "status": 7, 
    "value": { 
    "message": "The element could not be found" 
} 
} 

По крайней мере, теперь я могу видеть, какой элемент он был основан на XPath. Это также работает с ChromeDriver