Ошибка запроса: параметр контекста "$ HIDDEN1 .__ EVENTVALIDATION" не найден в контексте теста

Ищу решение этой проблемы:

При запуске автоматического веб-теста я получил неудачный запрос, и вот вам ответ, который я нашел: Запрос не удался: параметр контекста '$ HIDDEN1 .__ EVENTVALIDATION' не найден в контексте теста. Я выяснил, какой запрос скрыт. Предполагалось, что поле извлекается из (в предыдущем запросе), где (Hidden1) я нашел его в правиле извлечения предыдущего запроса, а значение правила извлечения для имени параметра контекста равно 1.

Примечание. В этот раз я использую параметры статики, а состояние HTTP равно 200.

После поиска в Интернете я обнаружил: http://blogs.msdn.com/b/slumley/archive/2007/04/10/how-to-debug-a-web-test.aspx, где мне не удалось найти свой раствор в нем.

Этот вопрос кажется сложным, потому что я хранил его 2 дня, не получив ответа! Если кто-то хочет узнать больше, я на связи 24/24 :) Большое спасибо ...


person Abdelrahman ELGAMAL    schedule 30.09.2011    source источник
comment
Отсутствие скрытых полей - самая распространенная проблема при веб-тестировании Visual Studio. Это означает, что в предыдущем ответе отсутствовало поле __EVENTVALIDATION. Обычно это происходит из-за того, что предыдущий запрос не удался или получил неожиданный ответ. Поэтому вам следует искать проблему в предыдущем запросе (или, возможно, даже до этого). Полезной практикой является добавление правил проверки к каждому запросу, чтобы вы могли быть достаточно уверены в том, что ответы соответствуют вашим ожиданиям.   -  person agentnega    schedule 07.10.2011


Ответы (4)


У меня была проблема, аналогичная той, с которой вы столкнулись (я вижу, что этот вопрос очень старый, но я думал, что опубликую решение, поскольку это первый результат в Google по этой проблеме).

Проблема в том, что тег __EventValidation - одна из последних вещей, отображаемых браузером, и что веб-тесты VisualStudio 2008 усекают объект ответа, когда он превышает определенную длину (я думаю, что ограничение составляет 1,5 МБ).

У вас есть три варианта:

  1. Спросите себя, почему размер вашей страницы превышает 1,5 МБ и необходимо ли это, особенно если это общедоступный веб-сайт?
  2. Установите для переменной ResponseBodyCaptureLimit в веб-тесте огромное значение, единицы измерения указаны в байтах, так что что-то вроде 9 000 000 (9 МБ) будет достаточно большим, чтобы получить любой объект ответа. Просто имейте в виду, что это повлияет на использование памяти вашим веб-тестом, и если вы используете это для любого тестирования нагрузки / производительности, это будет означать, что вашим агентам потребуется больше памяти.
  3. Переопределите метод OnPreRender, чтобы переместить тег __EventValidation из нижней части страницы в верхнюю.

Надеюсь, что это поможет любому, кто сталкивается с подобными проблемами.

~ Дэн

person Dan    schedule 16.02.2012

Я сталкиваюсь с подобными проблемами и все еще работаю над ними. А пока может помочь эта ссылка:

http://blogs.msdn.com/b/slumley/archive/2007/04/10/how-to-debug-a-web-test.aspx

person John    schedule 04.10.2012

Решение состоит в том, чтобы изменить все атрибуты EnableEventValidation на true (это значение по умолчанию).

Но лучшее решение в моем открытии - использовать VSTS visualstudio 2010, он лучше, чем в 2008 году, действительно между ними обоими произошла большая эволюция.

person Community    schedule 11.10.2011

Если кто-то столкнется с этой проблемой и решит переопределить метод рендеринга, вот пример кода.

        var stringWriter = new System.IO.StringWriter();
        var htmlWriter = new HtmlTextWriter(stringWriter);
        base.Render(htmlWriter);

        var html = stringWriter.ToString();

        const string validationELement = "<input type=\"hidden\" name=\"__EVENTVALIDATION\"";
        const string hiddenDivName = "<div class=\"aspNetHidden\">";

        // Find event validation element.
        var startIndex = html.IndexOf(validationELement);
        if (startIndex >= 0)
        {
            var endIndex = html.IndexOf("/>", startIndex) + 2;

            // Cut event validation element.
            var input = html.Substring(startIndex, endIndex - startIndex);
            html = html.Remove(startIndex, endIndex - startIndex);

            // Paste element into hidden div.
            var hiddenDivStartIndex = html.IndexOf(hiddenDivName);
            html = html.Insert(hiddenDivStartIndex + hiddenDivName.Length, input);
        }

        writer.Write(html);
person vlaku    schedule 10.10.2013