【问题标题】:Sometimes Exists property is not supported有时不支持 Exists 属性
【发布时间】:2019-04-25 20:51:21
【问题描述】:

我遇到了一个非常令人沮丧的错误,有时会出现,有时会毫无问题地运行。我的代码是:

function killProcesses(processes) { // A string array of process names.
  for (i = 0; i < processes.length; i++) {
    var process = Sys.WaitProcess(processes[i])

    if (process.Exists) { // Sometimes the script will crash right here
      process.Terminate()
    }
}

自从我创建函数以来,我总是传递完全相同的进程名称,有时它们会启动其他人,但他们不是,这从来都不是问题。但其他时候它会在运行时崩溃并告诉我Object doesn't support this property or method。就像我说的,这个函数和调用它的行从来没有改变过,所以我不明白为什么只是有时它会失败。

我之前在脚本的其他部分中也遇到过这个问题,所以我想知道这可能是相关的,还是我的系统出现了一般性问题。真正让我感到困惑的是,Exists 应该始终存在于所有事物中,那么为什么有时它不存在呢?

【问题讨论】:

    标签: jscript testcomplete


    【解决方案1】:

    Sys.WaitProcess(ProcessName) 方法应该返回找到的进程或只有属性 Exists 的空存根对象,如果未找到进程,则其值为 false。找到进程没关系,用Exists检查是否找到进程应该没问题。

    我在控制对象方面遇到了与Find 方法的结果值相同的问题,并且对于从Find 方法返回的所有对象都很普遍。

    我找到了解决方法:

    如果在访问 Exists 之前访问不同的属性(例如 Name),则不会出错。

    obj.Name; // Add this to prevent error in obj.Exists below:
    if (obs.Exists)
    {
        // Do something here
    }
    

    这仅适用于预期对象。就我而言,他们是。如果没有找到预期的对象,obj.Name 将抛出一个错误,这和预期的一样。

    在预期找不到对象的情况下,如果Exists 不起作用,您将被卡住,因为结果值不为空或不为空,obj.Name 将抛出您想要的错误避免,您可以检查的唯一条件是obj.Exists

    但是,如果找到进程,可能值得尝试看看这是否适用于进程对象。

    【讨论】:

    • 感谢 RobC 以代码格式命名方法和属性。这是我的第一篇文章,我需要学习如何使用代码格式。
    【解决方案2】:

    也许你可以通过拥有来保护 null

    如果(进程 && 进程。存在)

    我也会从顶部向下循环,以防进程终止影响您的进程列表。

    【讨论】:

      【解决方案3】:

      此代码的问题在于,当您终止第一个进程时,其余进程的索引会减少。这个版本的代码更好:

      function killProcess(pName) {
        var p = Sys.WaitProcess(pName, 5000, 1);
        while (p.Exists) {
          p.Terminate();
          while (p.Exists)
            Sys.Delay(50);
          p = Sys.WaitProcess(pName, 5000, 1)
        }
      }
      

      【讨论】:

      • 这并不能回答为什么.Exists 会导致我的脚本崩溃的问题。如果我使用你的建议,当它到达那条线时,它仍然会随机崩溃。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2011-10-25
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多