1

我正在尝试测试具有 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 不能处理空值还是我有问题。

有没有人有一些类似的代码工作?

4

1 回答 1

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));
}

它假定旧值将在更改之前被读取,因此如果您在启动更新后使用它太长时间,则可能会出现竞争条件,但它适用于我。

于 2009-10-22T05:03:32.457 回答