Статус HTTP: «500» - ›неверное отображение статуса JSON для« тайм-аута »(ожидается 408) при нажатии элемента с помощью IEDriverServer Selenium и Java

Ниже приведены подробности, относящиеся к моему потоку -

  • Страница - 1 - Вход на веб-страницу
  • После входа в систему появляется URL-адрес (назовем его элементом 1)
  • После нажатия на элемент 1 веб-страница снова загружается, и мне нужно щелкнуть другой элемент (назовем его элементом 2).

Проблема - драйвер застревает, либо элемент 1 не нажимается, либо после добавления достаточного времени ожидания нажимается элемент 1, но теперь драйвер застревает в этом потоке, как вы можете видеть из кода ниже, когда вызывается clickurl.click(), затем через 10 секунд я должен получить сообщение «Сон завершен .. Теперь мы возвращаемся к вызывающему классу»

Но вместо этого я получаю исключение.

Код -

clickurl = d1.findElement(By.xpath("XPath for Element 1"));

if ( clickurl != null ) {
    System.out.print("****** Clicking on it Directly ");
    clickurl.click(); 

    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.print("****** Sleep Completed.. Now we return to calling class ");`

Сведения о системе -

  • Сервер InternetExplorerDriver (64-разрядная версия) 3.14.0.0
  • Имя ОС: 'Windows 10'
  • Версия Java: 1.8.0_191

Другая информация -

  • Обратите внимание, что после нажатия на элемент 1 я использую driver.switchTo().defaultContent();

Подробная информация об ошибке -

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.

person Deepak Yadav    schedule 11.12.2018    source источник
comment
Привет всем, я попытался использовать код new WebDriverWait(d1, 5).until(ExpectedConditions.elementToBeClickable(clickurl)).click();, но теперь проблема в том, что код застревает на этом месте. Я использовал системный код, чтобы удалить сообщение до и после щелчка, но после щелчка сообщение не появляется, и драйвер застревает в этом разделе кода, а затем генерирует ту же ошибку, что и выше.   -  person Deepak Yadav    schedule 13.12.2018


Ответы (2)


Это сообщение об ошибке ...

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 необходимо установить одинаковые значения параметров Защищенного режима для каждой зоны. Значение может быть включено или выключено, если оно одинаково для каждой зоны. Чтобы установить параметры защищенного режима, выберите «Свойства обозревателя» в меню «Инструменты», а затем щелкните вкладку Безопасность. Для каждой зоны внизу вкладки будет установлен флажок Включить защищенный режим.

ProtectedModeSettings

@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
comment
Привет @DebanjanB, я попытался использовать код new WebDriverWait (d1, 5) .until (ExpectedConditions.elementToBeClickable (clickurl)). Click (); но теперь проблема в том, что код застревает на этом месте. Я использовал системный код, чтобы удалить сообщение до и после щелчка, но после щелчка сообщение не появляется, и драйвер застревает в этом разделе кода, а затем генерирует ту же ошибку, что и выше. - person Deepak Yadav; 13.12.2018
comment
@DeepakYadav Дополнительные аспекты, о которых я упомянул в своем ответе, являются частью обязательных конфигураций для работы с комбинацией IEDriverServer / Internet Explorer. Держите меня в курсе статуса. - person DebanjanB; 13.12.2018

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

Actions actions = new Actions(d1);
actions.moveToElement(clickurl).click().build().perform();

js.executeScript("arguments[0].click();",clickurl);

Чтобы прийти к такому выводу, я использовал следующий вопрос - Щелчок Selenium не всегда работает

person Deepak Yadav    schedule 17.12.2018