Автоматическое управление Telerik RadDatePicker - PullRequest
2 голосов
/ 08 октября 2011

Я использую WatIn для создания автоматизированного теста для веб-приложения, использующего элементы управления Telerik: моя первая задача - управлять датчиком Telerik - RadDatePicker.

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

Можеткто-нибудь предоставляет мне волшебную комбинацию взаимодействий?

(я уверен, что ответ поможет любому, кто использует любой автоматизированный инструмент тестирования, поэтому я также пометил этот вопрос еще парой других тестовых сред:-))

Ответы [ 4 ]

0 голосов
/ 04 сентября 2014

Решил эту проблему для SeleniumIDE - вы должны использовать метод «fireEvent» со значением «blur» для «ControlID» после того, как вы установили значение с помощью методов «sendKeys» или «type». Странно, что эта проблема не возникает при автоматизации с WebDriver.

0 голосов
/ 04 марта 2013

Я использую Selenium RC, и у меня была похожая проблема несколько дней назад.Мне понадобились целые годы, чтобы найти правильный способ сделать это, поэтому я подумал, что поделюсь решением, которое работало для меня:

(ПРИМЕЧАНИЕ: я не мог использовать $ find)

Javascriptустановить дату для RadDatePicker:

var appBrowser = this.browserbot.getCurrentWindow();
var datepicker = appBrowser.yourDatePickerId; //note: no quotes
var selectDate=new Date();
selectDate.setFullYear(yourYear,yourMonth,yourDay);
datepicker.SetDate(selectDate);
datepicker.DateInput.SetDate(selectDate);

, а затем использовать в тесте селен GetEval для вызова кода javascript для установки даты:

selenium.GetEval("javascript here");

Вы обязательно должны обернуть его вокругнекоторый параметризованный вспомогательный класс, который будет генерировать код JavaScript для вас каждый раз, когда вы хотите установить дату в тесте, передав идентификатор элемента управления и дату.

0 голосов
/ 30 октября 2013

У меня возникла та же проблема с RadDatePicker, который отправлял обратно пустое после ввода значений.

Мне удалось автоматизировать ввод даты в поле ввода с помощью следующих шагов:

  1. Выберите текстовое поле dateInput, связанное с элементом управления.
  2. Сделайте на нем dateInput. MouseClick()
  3. Введите дату в поле Manager.Desktop.KeyBoard.TypeText("1/1/1990")
  4. Сделайте.MouseClick() для любого другого элемента на странице, например, для некоторого элемента div

Я обнаружил, что # 4 был необходим для запуска событий, чтобы сделать размытие элемента управления и, следовательно, "сохранить" его значение.

Затем вы можете отправить, и значение должно быть вместе с ним.

0 голосов
/ 15 марта 2012

У меня наконец есть решение, которое работает.Ключ заключается в том, чтобы использовать JavaScript для вызова клиентского API для элемента управления telerik.Один и тот же метод требуется для всех сложных элементов управления Telerik, например RadInput.

Я использовал метод, рекомендованный на веб-сайте WatiN для написания собственного элемента управления http://watinandmore.blogspot.com/2009/12/wrapping-complex-logic-in-control.html, чтобы придумать следующее:

public class TelerikDatePicker : Control<TextField>
{
    public DateTime? Value
    {
        get
        {
            var jScript = string.Format(@"$find(""{0}"").get_selectedDate();", Element.Id);
            var selectedDateStr = Eval(jScript);
            return TranslateJavascriptDateStringIntoDateTime(selectedDateStr);
        }

        set
        {
            var jScript = string.Format(@"$find(""{0}"").set_selectedDate(new Date(""{1:MMMM dd,yyyy}""));", Element.Id, value);
            Eval(jScript);
        }
    }

    public void SetValue(DateTime? value)
    {
        if (value.HasValue)
            Value = value.Value;
        else
            Clear();
    }


    public void Clear()
    {
        var jScript = string.Format(@"$find(""{0}"").clear();", Element.Id);
        Eval(jScript);
    }


    private string Eval(string script)
    {
        return Element.DomContainer.Eval(script);
    }

    public bool IsEnabled()
    {
        var jScript = string.Format(@"$find(""{0}"").get_enabled();", Element.Id);
        return Eval(jScript) == "true";
    }

    private DateTime? TranslateJavascriptDateStringIntoDateTime(string jsDateStr /*E.g. Mon Mar 12 00:00:00 UTC+0100 2012*/)
    {
        if (String.IsNullOrEmpty(jsDateStr) || jsDateStr == "null") return null;

        var abbreviatedMonth = jsDateStr.Substring(4, 3);
        var dayOfTheMonth = jsDateStr.Substring(8, 2).TrimEnd(' ');
        var year = jsDateStr.Substring(jsDateStr.Length-4, 4);

        const string format = "d MMM yyyy";
        var dateStr = dayOfTheMonth + " " + abbreviatedMonth + " " + year;

        return DateTime.ParseExact(dateStr, format, CultureInfo.InvariantCulture);
    }
}
...