我在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)
我想要一些动态检测页面返回的东西。而不是给出一些恒定的价值。
答案 0 :(得分:5)
WaitForComplete仅在某些操作后有回发时才有效。否则你必须找到别的东西等待。下面是一个关于如何等待指定标题的示例:
_internetExplorer.Element("title", "Confirmation").WaitUntilExists();
我总是更喜欢使用WaitXXX方法之一而不是Thread.Sleep,因为WaitXXX方法只会等到达到约束。睡眠等待你指定的时间。如果它很长,时间就会缩短。如果简短,就会出现问题。
HTH, 的Jeroen
答案 1 :(得分:4)
一旦浏览器将其准备状态设置为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");
}
答案 2 :(得分:0)
如果正在执行下一个语句,则应该找到相应的元素。我建议发布您正在尝试的代码示例。