【问题标题】:Is there a way to AutoFormat (Javascript) code in TestComplete?有没有办法在 TestComplete 中自动格式化(Javascript)代码?
【发布时间】:2012-07-17 21:52:32
【问题描述】:

与 Netbeans 中的 ALt-Shift-F 非常相似,是否可以在 TestComplete 的 ide 中执行此操作?不确定这是否可行,或者是否有人可以在不离开 TestComplete 窗口的情况下想到自动格式化的解决方法。

我正在尝试使以下解决方案与 http://jsbeautifier.org/ 一起用于 TestComplete 中的 javascript / Jscript 代码。

谢谢

【问题讨论】:

    标签: javascript formatting code-formatting testcomplete


    【解决方案1】:

    好问题!

    没有内置函数。因此,我们不应该期望任何解决方案都是 100% 方便的 - 修改当前脚本编辑器内容(如果可能的话)并不是一项简单的任务。所以,无论你做什么,它仍然是某种妥协。

    一般来说,任务分为三部分:

    1. 获取当前单位代码。

    2. 格式化代码。

    3. 将代码放回单元。

    据我了解,第1、3项只能通过创建TestComplete插件来完成——访问项目节点的编辑器并不是一件容易的事。

    更新:愚蠢的我!有一种方法可以访问脚本编辑器代码 - 我更新了以下部分。

    Script Extensions 可以帮助我们避免切换到其他应用程序:

    • 我们以脚本扩展的形式创建一个自定义检查点,并将其安装到 TestComplete。结果,我们在工具栏上获得了一个按钮,我们可以单击该按钮来调用我们的代码。

    • 在设计时动作中,我们调用一些读取编辑器内容的代码,然后使用外部代码格式化功能,并用格式化代码替换编辑器内容。

    看看其他 TestComplete 用户可以建议的实现会非常有趣!首先,我发布了一个解决方案,其中包括使用外部网站格式化 VBScript 代码 (http://www.vbindent.com/)。我知道帖子的开头可能是使用 JScript,但我还没有找到 JScript 格式化程序。

    我的解决方案是一个简单的脚本扩展。这里不能发文件,所以把两个Script Extension文件的代码贴出来:

    描述文件:

    <!-- Description.xml -->
    <?xml version="1.0" encoding="UTF-8"?>
    <ScriptExtensionGroup>
      <Category Name="Checkpoints">
        <ScriptExtension Name="VBScript Code Indent" Author="SmartBear Software" Version="0.1" HomePage="smartbear.com">
          <Script Name="VBIndent.js">
            <DesignTimeAction Name="Indent Current VBScript Unit" Routine="DesignTimeExecute"/>
          </Script>
          <Description>
            Indents VBScript code in the currently active unit.
          </Description>
        </ScriptExtension>
      </Category>
    </ScriptExtensionGroup>
    

    代码文件:

    // VBIndent.js
    function DesignTimeExecute()
    {
      if (CodeEditor.IsEditorActive)
      {
        var newCode = IndentVBSCode_Through_VBIndent(CodeEditor.Text);
        if (null == newCode)
          return;
        CodeEditor.Text = newCode;
      }
    }
    
    function IndentVBSCode_Through_VBIndent(codeToIndent)
    {
      var URL_VBIndent = "http://www.vbindent.com/?indent";
    
      var httpObj = Sys.OleObject("MSXML2.XMLHTTP");
    
      httpObj.open("POST", URL_VBIndent, false);
      httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      httpObj.send("thecode=" + escape(codeToIndent));
    
      var responseText = httpObj.responseText;
    
      // Extract the indented code from the response
      var rx = /<textarea name=\"thecode\".*?>((.*\n)*?)<\/textarea>/;
      matches = rx.exec(responseText);
      if (null == matches)
      {
        return null;
      }
      codeIndented = matches[1];
      return codeIndented;
    }
    

    创建这些文件后,将它们放到“\Bin\Extensions\ScriptExtensions\VBIndent”之类的位置,然后单击“文件|安装脚本扩展|重新加载”,您将看到一个新的“缩进当前VBScript单元”项在工具工具栏上的自定义检查点下拉按钮中。单击该元素将在当前活动的编辑器中格式化 VBScript 代码。

    因此,这是为了清楚地了解解决方案的外观。欢迎提出更好的建议!分享你的想法!

    【讨论】:

    • 来吧,伙计们——敢于挑战!建议您的解决方案! :) 复杂的部分已经整理好——您只需要使用您的代码更改 DesignTimeExecute 例程实现即可。我什至会在这里开始赏金,但看起来我还不能这样做......
    • 我的想法是也许人们只是不使用 testComplete ide?我经常把我的代码扔到 netbeans 中,然后返回 testComplete 来格式化它。
    • jsbeautifier.org 我试图合并它以使您的解决方案适用于 Javascript
    • 嗯...虽然可能是这种情况,但我不认为很多人会这样做——这种方法对于日常工作来说并不容易。在那个时候,虽然TC的脚本编辑器没有这个能力,但是对于很多其他的使用场景来说还是可以的。那么,也许任务本身并不那么受欢迎?需要重新格式化代码的用例有哪些?
    • 哦,原来jsbeautifier.org我没找到。在这里看到您的解决方案会很酷!如果您需要有关实施的建议,请告诉我。我也想过使用本地命令行实用程序来避免使用 Internet,但手头没有合适的工具。
    【解决方案2】:

    仅供参考

    我已经完成了。根据您的帖子。

    JSFormat.tcx

    https://drive.google.com/uc?export=download&id=0B1x_73bHRc2Jcm8wbTJ2dUpZQTQ

    安装扩展复制附件 JSFormat.tcx 到 C:\Program Files (x86)\SmartBear\TestComplete 10\Bin\Extensions\ScriptExtensions

    使用查看下一张图片:

    https://drive.google.com/uc?export=download&id=0B1x_73bHRc2Jc3RuLXFpTnlCSnc

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      相关资源
      最近更新 更多