Использование Watir в приложении Peoplesoft: каждое текстовое поле перезагружает страницу - PullRequest
1 голос
/ 08 февраля 2011

Я использую Watir 1.6.7.

Я работаю над разработкой некоторых регрессионных тестов для приложения PeopleSoft с использованием Watir и Cucumber. Я столкнулся с несколькими проблемами с формами в приложении.

Во-первых, при вводе значения в текстовое поле страница обновляется, когда пользователь щелкает за пределами текстового поля. Ожидание существования следующего элемента text_field является проблематичным, поскольку он может найти элемент до перезагрузки страницы или после перезагрузки страницы, как ожидалось. Увеличение времени ожидания никогда не кажется хорошим решением, даже если оно «работает».

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

Существуют ли другие подходы, которые были бы менее хрупкими и не требовали бы 2-3 дополнительных команд между каждым действием text_field?

Игра по пьесе выглядит следующим образом:

  • Браузер переходит на страницу, которая содержит форму.
  • Браузер заполняет первое поле формы. (исправлено: отправка нажатия клавиши для обновления страницы, ожидание до тех пор, пока второе поле снова не будет видно)
  • Браузер выбирает второе поле формы для заполнения. (снова нажатие клавиши и wait_until)
  • Страница обновляется, скрипт завершается ошибкой. (решено)
  • Браузер выбирает третье поле формы ...

Ответы [ 3 ]

2 голосов
/ 01 марта 2011

Приложение начало превышать 5 секунд, и я больше не хотел увеличивать время ожидания.Я хотел посмотреть, что произойдет, если я заполню текстовое поле быстрее, используя "element.value =", а не символ за символом с "element.set".

Это изменение полностью устранило все сложности.Страница больше не обновляется при вводе текста и больше не требует оператора send_keys для использования TAB или ENTER для перехода в другое поле.Форма хранит все введенные данные, даже если между полями нет обновлений или сохранений состояния.

Предыдущий метод:

def enter_text(element, text)
    element.set text
    @browser.send_keys("+{TAB}")
    sleep 5
    Watir:Wait.until { element.exists? }
end

Новый метод:

def enter_text(element, text)
    element.value = text
end
1 голос
/ 25 февраля 2011

Я не достаточно хорошо знаю приложениеoplesoft, чтобы это знать, но отображает ли приложение что-либо для пользователя во время его обработки ... вроде какой-то маленькой «загружаемой» графики или чего-то, что вы могли бы отключитьчтобы сказать, когда это будет сделано?

Я видел приложения, которые делают это, и элемент представляет собой просто анимированный GIF или PNG, и он отображается путем изменения атрибута видимости div, который содержит графику.В этом случае вы можете определить, загружается ли приложение, используя .visible?метод на этот элемент и спать некоторое время, если он все еще там.

для приложения, которое я тестирую (у которого есть одна из этих «иконок»), я создал простой метод, который я назвал sleeptimeloading.все, что он делает, это использует одну секунду сна, завернутую в цикл while, который проверяет, виден ли значок загрузки.работает как шарм

1 голос
/ 09 февраля 2011

Во-первых, здесь есть интересные методы ожидания: Как использовать Watir :: Waiter :: wait_until, чтобы заставить Chrome ждать?

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

Если вы ищете идеи по пользовательскому ожиданию, вы можете проверить изменения вHTML-код вашей страницы, формы или текстового поля.Вы можете проверить, что текстовое поле является .visible ?.Вы можете попытаться получить доступ к следующему текстовому полю (например, щелкнуть по нему или задать значение), затем перехватить исключение, если оно не может найти текстовое поле, и повторить попытку, пока оно не прервется, что решит обе ваши проблемы сразу.

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

Редактировать : Добро пожаловать,и спасибо за разъяснение, я думаю, теперь я понимаю лучше.Если вы разрешите Watir вызывать ожидание своей страницы или заставите его, тогда он будет ждать обновления, и вы сможете найти новое текстовое поле.Нажатие клавиш не вызывает ie.wait, поэтому, если вы отправляете одно нажатие клавиши, а затем вызываете ожидание, остальная часть вашего сценария будет реагировать на состояние после обновления.

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

...