Вопрос по webdriver, internet-explorer, selenium – Ошибка Selenium WebDriver для IE

4

Я пытаюсь автоматизировать тестовые случаи, используя селен webdriver, junit и ant build. Я получаю странные ошибки с утра. Тестовый пример содержит команду нажатия кнопки. Тест проходит успешно на Chrome и FF, но не на IE. Ранее, по крайней мере, говорилось, что не удалось найти какой-то элемент X, но этот говорит, что сервер не предоставил никакой информации.

Testcase: testMethod took 10.342 sec
    Caused an ERROR
Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
com.thoughtworks.selenium.SeleniumException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
    at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:41)
    at org.openqa.selenium.internal.seleniumemulation.Timer.run(Timer.java:38)
    at org.openqa.selenium.WebDriverCommandProcessor.execute(WebDriverCommandProcessor.java:144)
    at org.openqa.selenium.WebDriverCommandProcessor.doCommand(WebDriverCommandProcessor.java:74)
    at com.thoughtworks.selenium.DefaultSelenium.click(DefaultSelenium.java:193)
    at dmswebui.IE.TestLogin.testMethod(TestLogin.java:19)
Caused by: org.openqa.selenium.ElementNotVisibleException: Cannot click on element (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 172 milliseconds
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_33'
Driver info: driver.version: RemoteWebDriver
Session ID: 8dfc5072-2755-40a7-bb32-05708c51101f
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:458)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:244)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:77)
    at org.openqa.selenium.internal.seleniumemulation.Click.handleSeleneseCommand(Click.java:36)
    at org.openqa.selenium.internal.seleniumemulation.Click.handleSeleneseCommand(Click.java:1)
    at org.openqa.selenium.internal.seleniumemulation.SeleneseCommand.apply(SeleneseCommand.java:32)
Error: User Rate Limit Exceeded Arran

Ваш Ответ

4   ответа
4

Caused by: org.openqa.selenium.ElementNotVisibleException: Cannot click on element

Обычно это происходит, когда элемент, на который вы щелкаете, скрыт или скрыт на странице. WebDriver использует собственные события, поэтому завершается ошибкой всякий раз, когда вы просите его выполнить действие над скрытым WebElement.

Это не было проблемой в Selenium RC, поскольку он развертывал синтетические события (события JS) и мог имитировать щелчок по любому элементу DOM независимо от его видимости.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded riship89
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded riship89
1

for (int second = 0;; second++) {
    if (second >= 60) return "Page load failed";
    try {
        if (session().isTextPresent("Logoff")) 
            break;
    } 
    catch (Exception e) {}
    Thread.sleep(1000);
}

В моем случае у меня есть суперкласс для теста, поэтому я могу сделать

session().somecommand

Но вы можете перевести мое решение на свое.

0

что процесс отправки занял слишком много времени, например, более двух минут, и моя проблема была решена, заключив в себе действие щелчка мышью на элементе try catch и добавив режим ожидания для завершения процесса, затем продолжите. Код следующим образом

try {
        button.click();
    } 
    catch (Exception e) 
{
    Thread.sleep(1000);
}
2

по крайней мере, в самой последней версии 10 и предыдущих 9, DOM не может быть полностью перезагружен или видим для WebDriver в одностраничных приложениях или на больших страницах Ajax, где DOM создается динамически. Я нашел обходной путь, чтобы просто обновить страницу

driver.navigate().refresh();

Я понимаю, что это может показаться хаком, но это заставляет браузер IE перезагрузить страницу и нарисовать текущие ожидаемые элементы DOM. Даже вставка WebDriverWait не помогла (хотя это лучшая практика и должна быть реализована в большинстве случаев при работе с тяжелыми ajax-приложениями).

Во время моего опыта я использовал последнюю версию webdriver (2.31.0) в проекте Java и IE 10 (в режиме и из режима компатации).

Как только я выясню, почему IE делает это, я обновлю этот ответ до более долгосрочного портативного решения, чем просто обновление страницы. Сейчас я перешел к использованию Chrome Driver и внедрил Chrome Frame в IE.

Похожие вопросы