我正在使用WatIn为一个使用Telerik控件的Web App创建一个自动化测试:我的第一个挑战是驱动一个Telerik date控件--一个RadDatePicker。
简单地在最可能的输入字段中输入文本是不起作用的:当表单发布时,该值被重置为空白。因此,我想我需要一组更复杂的自动化交互--例如,我发现this thread on the Telerik site正在讨论如何从Telerik组合框中自动选择。
有没有人能提供我所需要的交互的神奇组合?
(我相信答案对任何使用自动化测试工具的人都有帮助,因此我也用其他几个测试框架标记了这个问题:-)
发布于 2013-03-04 17:36:29
我正在使用Selenium RC,几天前遇到了类似的问题。我花了很长时间才找到正确的方法,所以我想我将分享对我有效的解决方案:
(注意:我不能使用$find)
在RadDatePicker上设置日期的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代码来设置日期:
selenium.GetEval("javascript here");每次你想通过传递控件的id和date来设置测试中的日期时,你绝对应该把它包装在某个参数化的助手类中,这个类将为你生成javascript代码。
发布于 2012-03-15 15:51:31
我终于有了一个可行的解决方案。关键是使用javascript来调用telerik控件的客户端API。所有复杂的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);
}
}发布于 2013-10-30 07:32:49
我也遇到过同样的问题,因为RadDatePicker在输入值后返回为空。
我设法通过以下步骤自动在输入字段中键入日期:
MouseClick() on it.MouseClick()字段中键入日期,例如<>G212
我发现需要#4来激发事件,使控件变得模糊,从而“保存”它的值。
然后你就可以提交了,值也应该随之而来。
https://stackoverflow.com/questions/7697352
复制相似问题