首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Telerik RadDatePicker的自动控制

Telerik RadDatePicker的自动控制
EN

Stack Overflow用户
提问于 2011-10-08 22:10:57
回答 4查看 1.3K关注 0票数 2

我正在使用WatIn为一个使用Telerik控件的Web App创建一个自动化测试:我的第一个挑战是驱动一个Telerik date控件--一个RadDatePicker。

简单地在最可能的输入字段中输入文本是不起作用的:当表单发布时,该值被重置为空白。因此,我想我需要一组更复杂的自动化交互--例如,我发现this thread on the Telerik site正在讨论如何从Telerik组合框中自动选择。

有没有人能提供我所需要的交互的神奇组合?

(我相信答案对任何使用自动化测试工具的人都有帮助,因此我也用其他几个测试框架标记了这个问题:-)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-04 17:36:29

我正在使用Selenium RC,几天前遇到了类似的问题。我花了很长时间才找到正确的方法,所以我想我将分享对我有效的解决方案:

(注意:我不能使用$find)

在RadDatePicker上设置日期的javascript是:

代码语言:javascript
复制
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);

然后在测试中使用selenium GetEval调用javascript代码来设置日期:

代码语言:javascript
复制
selenium.GetEval("javascript here");

每次你想通过传递控件的id和date来设置测试中的日期时,你绝对应该把它包装在某个参数化的助手类中,这个类将为你生成javascript代码。

票数 0
EN

Stack Overflow用户

发布于 2012-03-15 15:51:31

我终于有了一个可行的解决方案。关键是使用javascript来调用telerik控件的客户端API。所有复杂的Telerik控件都需要相同的技术,例如RadInput。

我使用了WatiN网站上推荐的技术来编写您自己的控件http://watinandmore.blogspot.com/2009/12/wrapping-complex-logic-in-control.html,从而实现了这一点:

代码语言:javascript
复制
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);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-10-30 07:32:49

我也遇到过同样的问题,因为RadDatePicker在输入值后返回为空。

我设法通过以下步骤自动在输入字段中键入日期:

  1. 选择与控件关联的dateInput文本框。
  2. 执行dateInput。MouseClick() on it
  3. 在页面上任何其他元素上的.MouseClick()字段中键入日期,例如

<>G212

我发现需要#4来激发事件,使控件变得模糊,从而“保存”它的值。

然后你就可以提交了,值也应该随之而来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7697352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档