Я использую Webdriver (без реализации IEDriver) 2.23 API на машине Windows 7 с JDK7 и JRE7. Сценарии тестирования работают нормально, как ожидалось, но когда я представил IEDriver, сценарий выходит из строя на странице, не могу нажать на сообщение об ошибке элемента, поскольку соответствующий элемент не отображается. Я дважды проверил с моим приложением для локатора. То же самое можно сделать без реализации IEDriver. Я попытался имитировать все типы кликов, включая контекстный щелчок по классу Action. Не использовать. Все типы кликов возвращают один и тот же результат. Любая помощь ?Реализация IEDriver не проходит тест
ответ
Наконец-то мне удалось щелкнуть вышеупомянутый Элемент с помощью следующего кода.
WebElement we = driver.findElement(By.name("Complete"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", we); // common for all we
Настоящий источник - here. Это может помочь кому-то.
Хорошо, что он работает, но код не очень чистый. В моем случае у IEDriver нет проблем щелкнуть объекты WebElement. У меня есть некоторые идеи о том, что может произойти, и, вероятно, мы сможем получить лучшее решение для этого. Не могли бы вы рассказать мне, что произойдет, если вы запустите 'we.click()' напрямую. –
@ Серхио Пелин, я согласен. Это тоже для меня характерно. Потому что я могу выполнять те же действия (CLick) с другими элементами. Это происходит только с этим элементом. Я не могу загрузить трассировку стека здесь. Точная ошибка: Невозможно щелкнуть элемент, поскольку он не отображается. – Karthikeyan
@ Karthikeyan Ok. Еще два вопроса перед выступлением. 1: У вас есть некоторый возникающий элемент вокруг, например. говоря «Загрузка ...» или подобное? 2: Не могли бы вы вставить в свой код перед 'we.click()', строку для печати следующего значения 'we.isDisplayed()'? Скажите мне, если это «истина» или «ложь», а затем мы будем обходить это. –
Как вы говорите, элемент действительно виден, и журнал ошибок говорит, что это не так, я думаю, что проблема может быть из-за медлительности Internet Explorer. Вы можете использовать этот метод для быстрого тестирования:
boolean isElementDisplayed(final WebDriver driver, final WebElement element, final int timeoutInSeconds) {
try {
ExpectedCondition condition = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(final WebDriver webDriver) {
return element.isDisplayed();
}
};
Wait w = new WebDriverWait(driver, timeoutInSeconds);
w.until(condition);
} catch (Exception ex) {
//if you get here, it's because the element is not displayed after timeoutInSeconds
return false;
}
return true;
}
Используйте это так:
WebElement we = driver.findElement(By.name("Complete"));
if (isElementDisplayed(driver, we, 30)) {
we.click();
}
Это заставит ждать водителя (. 30 сек макс) до элемента мы становится видимым и то драйвер нажимает на него. Если он работает, то мое предположение правильно, и вы могли бы изменить метод:
void clickOn(final WebDriver driver, final WebElement element, final int timeoutInSeconds) {
try {
ExpectedCondition condition = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(final WebDriver webDriver) {
element.click();
return true;
}
};
Wait w = new WebDriverWait(driver, timeoutInSeconds);
w.until(condition);
} catch (Exception ex) {
//probably some kind of exception thrown here
}
return;
}
и использовать его вместо we.click()
, как:
WebElement we = driver.findElement(By.name("Complete"));
clickOn(driver, we, 30);
Код выше является приблизительным, чтобы вы проверьте свою проблему быстрым и понятным образом, и, если вы закончите использовать ее, вы должны адаптировать ее к своей структуре кода. Такой код полезности никогда не должен появляться в ваших тестах. Ваш тестовый код должен быть чистым и одинаковым для всех сред (браузеры, версия, SO и т. Д.). Храните обходные пути отдельно, например. какой-то util
упаковка.
Кроме того, подпись метода - «избыточный вес». Реструктурируя свой код использования, вы должны иметь возможность написать в своих тестах только следующее: clickOn(element)
.
Надеется, что это помогает;)
UPDATE На самом деле, с этими компонентами я никогда не столкнуться с подобной проблемой:
selenium-server-standalone
версия 2.32.0- IEDriverServer_x64_2.30.1.exe
К сожалению, 'isElementDisplayed (driver, we, 30)' всегда здесь false. Но 'System.out.println («Размер кнопки« + driver.findElements (By.name («Complete»)). Size()); это 1. – Karthikeyan
@ Karthikeyan Ok. Возобновление того, что у нас есть: 1-Код работает с другими браузерами (по крайней мере, с FF); 2-С IE Selenium можно найти кнопку, но находит ее как не отображаемую (т. Е. Не кликабельную); 3 - Проблема связана не с медленностью IE, так как кнопка остается не отображаемой даже через 30 секунд. Не могли бы вы сделать следующее: 1-Изменить имя кнопки для чего-то менее общего (например, «MySeleniumButton»), чтобы просто убедиться, что Selenium находит этот, а не другой элемент; 2-Откройте приложение в IE, убедитесь, что вы можете нажать кнопку, а затем скопировать и опубликовать здесь код HTML-кода кнопки. –
1.Но его не работает с FF тоже. 2.Да, он может его найти. Следовательно, System.out.println («Размер кнопки« + driver.findElements (By.name («Complete»)). Size()); is 1. У меня пока нет доступа к коду AUT. То же самое работает с селеном 2.23 (с выходом IEDriver) – Karthikeyan
- 1. реализация Java UUID5 не проходит единичный тест
- 2. rspec тест не проходит
- 3. shouldFailWithCause не проходит тест
- 4. Почему следующий тест не проходит?
- 5. Rspec send_data тест не проходит
- 6. Если заявление не проходит тест
- 7. Элемент массива не проходит тест
- 8. Rspec тест маршрутизации не проходит
- 9. тест junit (eclipse) не проходит и не проходит
- 10. Selenium IEdriver NoSuchElementException исключительно
- 11. не может понять, почему тест мокко проходит
- 12. Огурец h1 проходит тест, но не должен?
- 13. Ошибка в функции не проходит тест
- 14. Код JavaScript не проходит Тест Jasmine toThrow
- 15. Контрольный тест не проходит в рельсах
- 16. Тест не проходит в 8.20 railstutorial
- 17. Почему regex + группировка не проходит тест?
- 18. Тест глубины Tango не проходит хорошо
- 19. по умолчанию не проходит тест is_copy_assignable
- 20. Джанго форма не проходит is_valid() тест
- 21. Почему мой экспресс-тест не проходит?
- 22. Тест не проходит, как узнать, почему?
- 23. C++ newline не проходит тест diff?
- 24. Почему этот тест с обещаниями не проходит?
- 25. Laravel - вход не проходит через единичный тест
- 26. Почему этот тест Django проходит?
- 27. Охрана проходит мой тест RSpec
- 28. Тест на жасмин всегда проходит
- 29. Pax Экзамен проходит тест дважды
- 30. Тест устройства Android всегда проходит
Даже обновление до последней версии требует реализации IEDriver. Actaully Я пытаюсь это сделать. driver.findElement (By.xpath ("xpath")). Click(); является тревожным моментом в моем коде – Karthikeyan
Попробуйте использовать SendKeys (Keys.ENTER) вместо метода click(). –
@Sri, я попробовал все из них. Проблема в том, что сам элемент не виден. Это странно. Потому что то же самое работает без IEDriver. Кроме того, реализация IEDriver не влияет на все другие операции. Доступен только этот Элемент. – Karthikeyan