有时找不到TestComplete对象

时间:2015-10-07 12:48:33

标签: testcomplete

我在使用TestComplete时遇到了一些问题,因为有时候它找不到我的对象,有时它只是没有,因为对象为空,我得到一个错误。 例如,在这个小函数中

function SelectCountry(country){
  var page = Sys.Browser("*").Page("*");
  var panel = page.Form("ID1");
  select = panel.FindChildByXPath("//select[@id='ID2']");
  select.ClickItem(country);
  link = page.FindChildByXPath("//a[@id='ID3']");    
  link.Click();
  page.Wait();
}

我在5次运行中有4次出现错误,告诉我没有找到选择,但是在一次幸运的运行中,一切都顺利通过。

有谁能告诉我我要检查什么?

3 个答案:

答案 0 :(得分:1)

尝试循环搜索对象。在每次搜索页面后,使用对象的Exists属性确定对象是否存在。另一种选择是使用等待方法https://support.smartbear.com/viewarticle/73657/ 由于您发现的原因,我建议避免硬编码延迟。他们在我的项目中搜索页面对象的方式是在循环中进行搜索并记录错误(如果没有找到)。

var stopTime = Win32API.GetTickCount() + 60000;
var currentUpTime = Win32API.GetTickCount();

while (currentUpTime < stopTime) { //repeat search for element for n milliseconds
    currentUpTime = Win32API.GetTickCount();
    for (i = 0; i < attributes.length; i++) {
        var element = eval('Sys.Browser("iexplore").Page("*").' + tcMethod + '(' + '"' + attributes[i] + '"' + ',' + "'" + attributeValue + "'" + ',20000' + ')');

        if (element.Exists) {
                return element;
            }
        }

    }

答案 1 :(得分:0)

我找到了一个有效的解决方案。很明显,问题的根源是页面没有正确加载。所以我在每个装订新页面的订书钉之前放了一些硬编码的停靠点。

aqUtils.Delay(2000);

有时我甚至要走5秒钟。 这仍然不是很稳定,因为由于某种原因,延迟有时会更高。 有没有办法告诉TestComplete它应该尝试在30秒内找到一个元素然后才引发错误?

答案 2 :(得分:0)

您总是可以使用测试完整代码

来延迟测试

aqUtils.Delay(2000);

如上所述。但是,如果您在测试中做得非常快,也会发生这种情况,因为测试到达对象可见之前的点。这就是我们在测试中使用延迟等待加载对象的原因。

尝试将断点放在对象上并在等待10秒后检查。如果测试通过此方法中的所有情况,则应该是由于对象加载的延迟。或者使用在提到的等待过程中 https://support.smartbear.com/testcomplete/docs/app-objects/common-tasks/waiting-process-or-window-activation.html