2011-10-08 68 views
2

我正在使用WatIn为使用Telerik控件的Web应用程序创建自动化测试:我的第一个挑战是驱动Telerik日期控件 - RadDatePicker。Telerik RadDatePicker的自动化控制

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

任何人都可以提供我需要的交互的魔力组合吗?

(我敢肯定的回答将帮助使用任何自动化测试工具的人,因此我还标记有一对夫妇的其他测试框架的这个问题太:-))

+0

经过相当多的谷歌搜索之后,我偶然发现了Telerik论坛上的一个老话题,它可能会*有我需要的答案。如果有效,我会用最新的代码片段更新这个答案。 [1]:http://www.telerik.com/automated-testing-tools/community/forums/test-studio-express/automation-framework/datepicker.aspx – MrBlueSky

+0

不行,那没用!我在Telerik论坛上提出了同样的问题。如果我在那里得到答案,将在这里更新: – MrBlueSky

回答

0

我使用硒RC和前几天也有类似的问题。我花了好长时间才找到这样做的正确的方式,所以我想我会分享我工作的解决方案:

(注:我不能用$找到)

的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"); 

你一定要包裹它周围的一些PARAM etrised助手类,每次你想通过传递控件和日期的id来设置测试日期时,将为你生成javascript代码。

0

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

我曾经推荐华廷网站上的技术编写自己的控制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); 
    } 
} 
0

我对RadDatePicker有同样的问题,在输入值后会回发空白。

我设法在约会打字这些步骤自动进入输入字段:

  1. 选择与控制相关的dateInput文本框。
  2. 做一个dateInput。 MouseClick()
  3. 键入日期到现场Manager.Desktop.KeyBoard.TypeText("1/1/1990")
  4. 任何其他元素上做一个.MouseClick()的网页,例如一些分区

我发现#4需要触发事件,使控制模糊,因此“保存”其值。

然后你可以提交,价值应该与它一起。

0

解决了SeleniumIDE的问题 - 在使用“sendKeys”或“type”方法设置了值之后,您必须使用“fireEvent”方法将值“blur”用于“ControlID”。奇怪的是,使用WebDriver进行自动化时,不会发生此问题。