1

我在 watiN 中使用 WaitforComplete() 但它似乎效果不佳。即使您等待更长的时间,它也会执行下一条语句。我正在使用 thread.sleep() 来停止我的应用程序,直到它获得所需的页面或元素。但问题是页面是如此动态,有时它需要更长的时间,如指定的那样。

任何更好的解决方案。任何会捕获页面的东西都会动态返回,并且不会去执行应用程序中的下一个语句。

代码示例

    'Show Details page
    Assert.AreEqual("Confirmation", _internetExplorer.Title)

    If (_internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Exists) Then
        _internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Click()
    Else
        Assert.Fail("Could not Find Finish Booking Button on Confirmation Page")
    End If

    System.Threading.Thread.Sleep(100000)

'显示预订摘要页面 Assert.AreEqual("显示预订", _internetExplorer.Title)

我想要动态检测页面返回的东西。而不是给出一些恒定的值。

4

3 回答 3

5

WaitForComplete 仅在某些操作后有回发时才能正常工作。否则,您必须找到其他东西等待。以下是关于如何等待指定标题的示例:

_internetExplorer.Element("title", "Confirmation").WaitUntilExists();

我总是更喜欢使用 WaitXXX 方法之一而不是 Thread.Sleep 因为 WaitXXX 方法只会等到满足约束。睡眠等待您指定的时间。如果它太长,时间是腰部。如果它太短,就会出现问题。

HTH,杰伦

于 2009-04-17T08:26:27.123 回答
4

一旦浏览器将它的 readystate 设置为 comllete 并且将 busy 状态设置为 false,WaitForComplete 方法就会继续运行。

我通常做的是尝试访问您需要的内容,然后执行 thread.sleep 半秒钟,然后再试一次。我还有一个全局超时,说 10 秒后退出。

    int timeout = 20;
    bool controlFound = false;
    for (int i = 0; i < timeout; i++)
    {
        if (_internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Exists)
        {
            _internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Click();
            controlFound = true;
            break;
        }
        else
        {
            System.Threading.Thread.Sleep(500);
        }   
    }


   if (!controlFound)
   {
        Assert.Fail("Control not found");
   }
于 2009-05-06T00:43:00.607 回答
0

如果它正在执行下一条语句,它应该正在寻找相应的元素。我建议发布您正在尝试的代码示例。

于 2009-04-15T09:20:58.463 回答