WebAii HtmlControl.Click () щелкает неправильный элемент управления - PullRequest
1 голос
/ 01 июля 2010

Я немного использовал бесплатную версию тестовой среды WebAii (выпущенной Art Of Test до того, как они были приобретены Telerik), поэтому я знаю, что она в основном работает. Так что проблема, с которой я столкнулся сейчас, совершенно сбивает меня с толку.

Я пытаюсь проверить навигацию на существующем сайте и просматриваю последовательность страниц. Я попадаю на страницу, которая имеет (среди прочего) две кнопки. Одним из них является кнопка «назад», которая является элементом ввода типа button с обработчиком onclick, который вызывает функцию javascript, которая просто вызывает history.back (). Другой - кнопка отправки.

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

Вот соответствующий HTML с сайта:

<div align="right"> 
    <table border="0" width="200" cellpadding="8" style="border-collapse: collapse" bordercolor="#E0DFE3"> 
        <tr> 
            <td> 
                <input type="button" value="<- Back" name="B2" onclick="cancelChange()" > 
            </td> 
            <td> 
                <input type="submit" value="Maint Details ->" name="lnkSubmit"> 
            </td> 
        </tr> 
    </table> 
</div> 

А вот и тестовый код:

        HtmlInputSubmit maintDetailsButton = Find.ByAttributes<HtmlInputSubmit>("value=Maint Details ->"); 
        maintDetailsButton.Click(); 

        Assert.IsTrue(ActiveBrowser.Url.Contains(expectedPage), "URL {0} does not contain expected page {1}", ActiveBrowser.Url, expectedPage); 

Последовательность операций работает нормально, когда я нажимаю на нее вручную, поэтому я не вижу доказательств того, что это проблема сайта. Я видел множество свидетельств того, что на самом деле это нажатие кнопки «Назад», а не кнопки «Подробная информация об обслуживании». (Fiddler показывает, что при отправке запроса на клик запрос не выдается - в соответствии с выполнением history.back (), поскольку браузер просто переотображается из своего кэша. Когда я нажимаю, он фактически переходит на предыдущую страницу. И, наконец, если я уберу атрибут «onclick» с кнопки «назад», чтобы нажатие на кнопку ничего не делало, то при выполнении тестового кода сайт ничего не делал - просто оставался на текущей странице.)

Я полностью сбит с толку. Кто-нибудь может дать мне подсказку?

1 Ответ

2 голосов
/ 02 июля 2010

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

Сначала я кое-что обнаружил. Из того, что я смог сделать вывод, когда вы выполняете Find, WebAii отслеживает этот элемент как индекс в списке всех элементов этого типа в документе. Затем, когда вы обращаетесь к найденному элементу, WebAii генерирует функцию JavaScript в форме «document.GetElementsByTag ('') [].» Я обнаружил это случайно, когда пытался найти способ идентифицировать элемент, который обнаружил WebAii, и непреднамеренно сгенерировал ошибку javascript, которая отображала функцию, которую он пытался выполнить в исключении. Итак, я решил, что если он обращается к элементу по индексу, а его индекс так или иначе отключен, то имело бы смысл щелкнуть элемент ввода раньше, чем тот, который я хотел. Поэтому я сделал Find.AllByTagName («input»), просмотрел итоговую коллекцию ReadOnlyCollection в отладчике VS и начал сопоставлять найденные элементы ввода с тем, что я мог идентифицировать, глядя на View View страницы. Я обнаружил, что находил тот, который WebAii не перечислял, в верхней части страницы, и при ближайшем рассмотрении обнаружил, что в элементе ввода, который отсутствовал, отсутствует закрывающая угловая скобка. Таким образом, по-видимому, WebAii не нашел это как элемент ввода, но javascript сделал. Поэтому, когда мой тест сказал «maintDetails.Click ()», это преобразовывалось во что-то вроде «document.GetElementsByTag ('input') [20] .click ()», когда из-за отсутствующего элемента это должно было быть "document.GetElementsByTag ( 'вход') [21] .click ()".

Я исправил отсутствующую угловую скобку в исходном коде сайта, и тест запустился.

...