如何模拟按钮的点击



我在Revit API功能区中有一个按钮,并希望模拟对其的按下以进行一些测试(我需要当前活动文档中的ExternalCommandData object(。但是,我似乎找不到类似PushButton.Click()函数的东西。

var panel = Application.CreateRibbonPanel("a", "b")
var buttonData = new PushButtonData(name, name, ApplicationInfo.AddInPath, "TestZone.Commands." + "DefaultCommand");
var button = panel.AddItem(buttonData) as PushButton;

应用程序当然是OnStartup函数上的默认UIControlledApplication。无论如何要知道模拟按钮单击,以便我可以获取当前打开的文档的 ExternalCommandData 对象(在最终版本中,将进行检查以确保文档已经打开 ext。还是有另一种方法可以获取外部命令数据?

请注意,这个问题可能需要您了解 revit API,我怀疑仅了解 c# 就足以回答这个问题。

我在

单元测试 Revit 时遇到了许多相同的问题 - 其他用户是对的,如果不运行命令就无法获得ExternalCommandData object。幸运的是,有一个框架可以通过在外部自动启动和运行Revit来实现很多。https://github.com/DynamoDS/RevitTestFramework

Dynamo 小组构建了这个框架来自动化他们的测试,它提供了许多很棒的功能。

与您最相关的是,它实际上公开了一个有效的ExternalCommandData object

以下是他们框架中的一些示例代码。

/// <summary>
/// Using the TestModel parameter, you can specify a Revit model
/// to be opened prior to executing the test. The model path specified
/// in this attribute is relative to the working directory.
/// </summary>
[Test]
[TestModel(@"./bricks.rfa")]
public void ModelHasTheCorrectNumberOfBricks()
{
    var doc = RevitTestExecutive.CommandData.Application.ActiveUIDocument.Document;
    var fec = new FilteredElementCollector(doc);
    fec.OfClass(typeof(FamilyInstance));
    var bricks = fec.ToElements()
        .Cast<FamilyInstance>()
        .Where(fi => fi.Symbol.Family.Name == "brick");
    Assert.AreEqual(bricks.Count(), 4);
}

RevitTestExecutive.CommandData提供了您正在寻找的外部命令数据。

请注意,在计算机上以管理员身份安装 RTF 存在问题。我建议以本地用户身份将其安装到本地目录,这样您就不会遇到 Windows UAC 问题。

如果不运行命令,就无法获取 ExternalCommandData 对象。

可以使用UI 自动化以编程方式单击按钮。为命令配置键盘快捷方式并使用UI 自动化来模拟按键可能更简单。

有关在 Revit 中使用 UI 自动化的信息,请参阅 Jeremy Tammik 的博客:http://thebuildingcoder.typepad.com/blog/automation/

您无法模拟单击以启动外部命令,也无法自行创建有效的ExternalCommandData对象。在调用事件处理程序并在回调函数(即外部命令Execute方法等 Revit 事件处理程序(中为其提供有效的 Revit API 上下文时,只有 Revit 可以执行此操作。

但是,您可以使用PostCommand API 从其他一些有效的 Revit API 上下文启动外部命令,就像启动内置 Revit 命令一样:

http://thebuildingcoder.typepad.com/blog/about-the-author.html#5.3

最新更新