C# CodedUI测试未等待控件存在

C# CodedUI测试未等待控件存在,c#,visual-studio-2010,testing,coded-ui-tests,C#,Visual Studio 2010,Testing,Coded Ui Tests,我正在等待控件存在,但在按钮存在之前测试失败 它给出错误:控件不可用或无效 我使用的代码是: uIOKButton.WaitForControlExist(2000000); // Click 'OK' button Mouse.Click(uIOKButton, new Point(46, 19)); 超时,即使我将其设置为3小时,也会在30分钟后超时。因此,暂停并没有按预期的方式进行。它周围有什么东西吗 除了增加超时时间外,是否还有其他方法可以阻止它失败?我建议您添加一个检查,如: in

我正在等待控件存在,但在按钮存在之前测试失败

它给出错误:
控件不可用或无效

我使用的代码是:

uIOKButton.WaitForControlExist(2000000);

// Click 'OK' button
Mouse.Click(uIOKButton, new Point(46, 19));
超时,即使我将其设置为3小时,也会在30分钟后超时。因此,暂停并没有按预期的方式进行。它周围有什么东西吗


除了增加超时时间外,是否还有其他方法可以阻止它失败?

我建议您添加一个检查,如:

int count = 1;
while (btnExists() == false){ 
    if (count > 1000) {
        //fail test or say that btn is not available
     }
    count ++;
    wait (1);
}

你不必等待超过要求的时间。只要btn可用,测试将继续进行。但一定要将“count”设置为某个时刻有一个退出点,以防btn永远不会出现

您可以使用while循环而不是if语句

代码看起来像这样

loopcyle = 1;
While(!uIOKButton.WaitForControlExist(2000) && loopcycle <=20)
{
    // Click 'OK' button
    Mouse.Click(uIOKButton, new Point(46, 19));
    loopcycle ++;
    break;
}
loopcyle=1;
而(!uIOKButton.WaitForControlExist(2000)和&loopcycle我是这样做的:

while (!uIItemComboBox.Exists)
        {
            System.Threading.Thread.Sleep(1000);
        }
uIItemComboBox.SelectedItem = this.MyComboBox.UIItemComboBoxSelectedItem;

我相信有更好的方法,但它是有效的。

你最初做的是正确的方法。 但30分钟后会弹出默认测试超时

在“解决方案项”文件夹下的测试解决方案中,查找local.testsettings


双击它,转到超时并删除默认的30分钟超时。

您可能还需要尝试
WaitForControlReady

使用
Timeout
属性可使任何特定测试无限期。如果您知道测试将运行到某个时间,也可以指定该时间

[Timeout(TestTimeout.Infinite)]

在找到控件ID之前,尝试一下这个方法,对我来说是个好办法,但这需要一些时间。因此,如果你想尽早加载,可以寻找替代方法

BrowserWindow window = new BrowserWindow();
window.WaitForControlExist();

如果还没有,请检查控件是否确实存在,以及它是否与UIMap中定义的搜索属性匹配。我不明白:如果超时需要这么长的时间,为什么不想增加超时。那么“阻止它失败”是什么意思?是否要优雅的退出、异常处理程序或其他什么?问题是现在更有意义了。30分钟是默认的测试超时时间,如果本地没有更改的话。testsettings?@stoj Ya已经解决了。谢谢,对不起,我没有说得更清楚。谢谢,解决方案这么简单很好。框架返回误导性的异常消息很奇怪。我已经有一段时间没有这样做了一个测试遇到了超时,但我似乎记得正常的超时异常更有用。对于失败测试区域,我可以添加后面的测试步骤?这不是测试的这一部分,而是另一部分,这也可能导致问题。我想,我真的不明白你的意思“我可以添加后面的测试步骤"?对不起,我的意思是我可以在其中添加要按下的下一个按钮。希望这很清楚您的代码不正确。我想您指的是
while
循环,而不是第一个
if
语句。这会导致超时,然后检查按钮是否存在,还是继续检查?您的逻辑有缺陷。2000毫秒后,WaitForControlExist返回
false
并执行循环体。
鼠标。单击
会引发异常,因为该按钮不存在,测试将失败。此外:为什么在直接从循环后中断循环时增加
loopcycle
?如果取消中断,则该按钮存在(没有提出例外),然后此脚本将按下按钮19次,引发另一个异常,因为按钮按下一次后不再存在。谢谢,但问题出在local.testsettings上。默认超时为30分钟,因此它将始终超时。无论代码中有多少超时。请使用此属性在[TestMethod]属性之后输入。