我正在使用Watin,我想运行一些自定义JavaScript。我无法使用Browser.Eval,因为有时我会想要在IFrame内执行代码。我曾尝试使用DomContainer属性,但DomContainer返回完整的DOM而不是IFrame的DOM。 下例:当元素位于IFrame中时,是否可以让DomContainer返回Iframe?
Element.DomContainer.Eval(jScript)
有没有办法做到这一点使用Element对象?
我想避免有两个构造函数。 (见下文):
public class TelerikWatinTextBox: ITextBox
{
public TelerikWatinTextBox(Frame frame, string clientId)
{
Frame = frame;
ClientId = clientId;
}
public TelerikWatinTextBox(Browser browser, string clientId)
{
Browser = browser;
ClientId = clientId;
}
public string ClientId { get; set; }
public Browser Browser { get; set; }
public Frame Frame { get; set; }
#region ITextBox Members
public string Value
{
get
{
string value = "";
string jScript = string.Format(@"$find(""{0}"").get_value();", ClientId);
if (Browser != null)
{
value = Browser.Eval(jScript);
}
else if (Frame != null)
{
value = Frame.Eval(jScript);
}
return value;
}
set
{
string jScript = string.Format(@"$find(""{0}"").set_value(""{1}"");", ClientId, value);
if (Browser != null)
{
Browser.Eval(jScript);
}
else if (Frame != null)
{
Frame.Eval(jScript);
}
}
}
#endregion
}
public interface ITextBox
{
string Value { get; set; }
}
N.B. clientId是对DIV的引用。
你能更好地解释您的需求?例如,为什么不能区分第一种情况下调用Browser.Eval和第二种情况下调用Browser.Frames [x] .Eval(jScript)的两种情况? – Gabber 2012-03-21 13:41:47
我的网页中有telerik控件,使用watin与它们进行交互的最佳方式是执行一些javascript。它不像检查Input元素那么简单。例如,我有一个接口ITextBox。如果它的telerik文本框,然后我运行JS。如果它是一个标准输入元素,我只需设置该值。运行JS我需要找到ITextBox的DOM容器。有时这是一个框架,其他时候是浏览器。 – 2012-03-22 15:30:12
你对你正在寻找的元素有什么样的信息?你知道它是ITextBox类型的元素吗?如果你可以提取它的ID,你可以识别它的祖先以最终识别包含的帧(或者如果没有包含帧的文件) – Gabber 2012-03-22 16:00:25