Это сообщение об ошибке ...
Dec 11, 2018 5:02:56 PM org.openqa.selenium.remote.ErrorCodes toStatus
INFO: HTTP Status: '500' -> incorrect JSON status mapping for 'timeout' (408 expected)
Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out waiting for page to load.
... означает, что IEDriverServer не смог выполнить click()
с элементом.
Статус HTTP: '500'
Протокол передачи гипертекста (HTTP) 500 Внутренняя ошибка сервера код ответа указывает, что сервер обнаружил непредвиденное условие, которое помешало ему выполнить запрос.
Этот ответ об ошибке является универсальным ответом на все запросы. Иногда администраторы сервера регистрируют ответы об ошибках, такие как код состояния 500, с более подробной информацией о запросе, чтобы предотвратить повторение ошибки в будущем.
Статус HTTP: «408»
408 REQUEST TIMEOUT указывает, что сервер не получил полное сообщение запроса в течение времени, которое он был подготовлен к ожиданию.
Серверу СЛЕДУЕТ отправить в ответ вариант «закрыть» соединение, поскольку 408 подразумевает, что сервер решил закрыть соединение, а не продолжать ожидание. Если у клиента есть невыполненный запрос в пути, клиент МОЖЕТ повторить этот запрос при новом соединении.
Решение
Вам нужно вызвать WebDriverWait, чтобы нужный элемент стал интерактивным, и вы можете использовать следующее решение:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("XPath for Element 1"))).click();
Дополнительно нужно позаботиться о следующих аспектах:
- Защищенный режим. В Internet Explorer 7 или более поздних версиях в Windows Vista или Windows 7 необходимо установить одинаковые значения параметров Защищенного режима для каждой зоны. Значение может быть включено или выключено, если оно одинаково для каждой зоны. Чтобы установить параметры защищенного режима, выберите «Свойства обозревателя» в меню «Инструменты», а затем щелкните вкладку Безопасность. Для каждой зоны внизу вкладки будет установлен флажок Включить защищенный режим.
@JimEvans в своей статье Вы делаете это неправильно: в защищенном режиме IE и WebDriver четко упоминается:
Однако использование этой возможности не решает основной проблемы. Если граница защищенного режима нарушена, это может привести к очень неожиданному поведению, в том числе зависанию, неработающему расположению элемента и нераспространению щелчков. Чтобы предупредить людей об этой потенциальной проблеме, этой возможности были присвоены пугающие имена, например INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS
в Java и IntroduceInstabilityByIgnoringProtectedModeSettings
в .NET. Мы действительно думали, что сообщение пользователю о том, что использование этого параметра внесет потенциальную опасность в его код, будет препятствовать его использованию, но оказалось, что это не так.
Уровень масштабирования браузера. Уровень масштабирования браузера должен быть установлен на 100%, чтобы для собственных событий мыши можно было установить правильные координаты.
Ориентация на браузер. Проблема заключается в том, что сам IE не полностью учитывает сообщения Windows, которые мы отправляем окну браузера IE (WM_MOUSEDOWN и WM_MOUSEUP), если окно не имеет фокуса. В частности, элемент, на который выполняется щелчок, получит окно фокуса вокруг него, но щелчок не будет обрабатываться элементом. Возможно, нам вообще не следует отправлять сообщения; скорее, мы должны использовать API SendInput (), но этот API явно требует, чтобы окно имело фокус.
Вы можете найти подробное обсуждение в Один щелчок в селене действует как двойной щелчок
person
DebanjanB
schedule
11.12.2018
new WebDriverWait(d1, 5).until(ExpectedConditions.elementToBeClickable(clickurl)).click();
, но теперь проблема в том, что код застревает на этом месте. Я использовал системный код, чтобы удалить сообщение до и после щелчка, но после щелчка сообщение не появляется, и драйвер застревает в этом разделе кода, а затем генерирует ту же ошибку, что и выше. - person Deepak Yadav   schedule 13.12.2018