首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟点击按钮?

如何模拟点击按钮?
EN

Stack Overflow用户
提问于 2017-02-08 19:23:17
回答 3查看 1.1K关注 0票数 0

我在revit API功能区中有一个PushButton,想要模拟按压它以便执行一些测试(我需要当前活动文档中的ExternalCommandData object )。然而,我似乎找不到任何类似于PushButton.Click()函数的东西。

代码语言:javascript
复制
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对象(在最终版本中,将进行检查以确保文档已经打开。)或者,有没有其他方法可以获得externalCommandData?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-20 03:24:18

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

Dynamo团队构建了这个框架来自动化他们的测试,并且它提供了很多很棒的功能。

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

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

代码语言:javascript
复制
/// <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提供了您正在寻找的ExternalCommandData。

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

票数 1
EN

Stack Overflow用户

发布于 2017-02-09 04:40:42

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-02-09 14:58:34

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42111769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档