我正在尝试测试具有ajax调用以更新价格的网页。 在页面加载时触发ajax调用以更新最初为空的div。
这是我用来等待div内部文本更改的扩展方法。
public static void WaitForTextChange(this IE ie, string id)
{
string old = ie.Element(id).Text;
ie.Element(id).WaitUntil(!Find.ByText(old));
}
然而,即使我在等待之后写出旧值和ie.Element(id).Text时,它也不会暂停,它们都是空的。我无法调试,因为这可以暂停。
Find.ByText是否可以处理空值或者我有错误。
有没有人有一些与此类似的代码?
答案 0 :(得分:2)
在深入研究WatiN的约束之后,我最终找到了自己的解决方案。
以下是解决方案:
public class TextConstraint : Constraint
{
private readonly string _text;
private readonly bool _negate;
public TextConstraint(string text)
{
_text = text;
_negate = false;
}
public TextConstraint(string text, bool negate)
{
_text = text;
_negate = negate;
}
public override void WriteDescriptionTo(TextWriter writer)
{
writer.Write("Find text to{0} match {1}.", _negate ? " not" : "", _text);
}
protected override bool MatchesImpl(IAttributeBag attributeBag, ConstraintContext context)
{
return (attributeBag.GetAdapter<Element>().Text == _text) ^ _negate;
}
}
更新的扩展方法:
public static void WaitForTextChange(this IE ie, Element element)
{
string old = element.Text;
element.WaitUntil(new TextConstraint(old, true));
}
它假设在更改之前将读取旧值,因此如果您在启动更新后使用太长时间,则可能会出现竞争条件,但它对我有效。