Статус HTTP: «500» -> неверное отображение состояния JSON для «тайм-аута» (ожидается 408) при щелчке элемента с IEDriverServer Selenium и Java - PullRequest
0 голосов
/ 11 декабря 2018

Ниже приведена информация, относящаяся к моему потоку -

  • Страница - 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
  • Имя Os: '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.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

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

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

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

Я использовал приведенный ниже вопрос, чтобы достичь этоговывод - Селен клик не всегда работает

0 голосов
/ 11 декабря 2018

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

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 (HTTP) 500 Protocol Код ответа указывает, что сервер обнаружил непредвиденное состояние, которое не позволило ему выполнить запрос.

Этот ответ об ошибке является общим "всеобъемлющим" ответом.Иногда администраторы сервера регистрируют ответы об ошибках, например код состояния 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 Protected Mode и WebDriver четко упоминают:

Использование этой возможности не решает основной проблемы.Если граница защищенного режима пересекается, это может привести к очень неожиданному поведению, включая зависания, расположение элемента не работает и щелчки не распространяются.Чтобы предупредить людей об этой потенциальной проблеме, этой способности были даны громкие страшные имена, такие как INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS в Java и IntroduceInstabilityByIgnoringProtectedModeSettings в .NET .Мы действительно думали, что если вы скажете пользователю, что использование этого параметра приведет к потенциальной неработоспособности его кода, это будет препятствовать его использованию, но оказалось, что это не так.

  • Уровень масштабирования браузера : Уровень масштабирования браузера должен быть установлен на 100%, чтобы для событий собственной мыши можно было задавать правильные координаты.

  • Фокус браузера : Проблема в том, что сам IE, похоже, не полностью соблюдает сообщения Windows, которые мы отправляем в окно браузера IE (WM_MOUSEDOWN и WM_MOUSEUP), если окно не имеет фокуса.В частности, элемент, по которому щелкают, получит окно фокусировки вокруг него, но элемент не будет обрабатывать щелчок .Возможно, мы не должны отправлять сообщения вообще;скорее, мы должны использовать API SendInput (), но этот API явно требует, чтобы окно имело фокус.

Подробное обсуждение можно найти в Один щелчок в селенедействует как двойной щелчок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...