CodedUI中的System.WIndows.Forms.Ribbon控件

我正在开发C#winform应用程序。 我的表单中有Ribbon,其中包含多个选项卡和几个带状按钮。 我正在使用Coded UI进行测试。 我面临的问题是我无法使用编码的ui找到带状按钮,每当我将鼠标hover在任何色带控件上(比如色带按钮)时,它只会检测色带而不是该控件。 任何人都可以建议function区控件是否支持Coded UI进行测试? 如果是,那我该怎么办?

您找到的function区栏内还有另一个function区。

这是我的代码:文件选项卡打开按钮

var mainWindow = new WinWindow(app); mainWindow.SearchProperties.Add(WinWindow.PropertyNames.ControlName, "frmMain"); var ribbonBar = new WinWindow(mainWindow); ribbonBar.SearchProperties.Add(WinWindow.PropertyNames.ControlName, "radRibbonBar"); var ribbonBarInside = new WinMenuBar(ribbonBar); ribbonBarInside.SearchProperties.Add(WinWindow.PropertyNames.Name, "radRibbonBar"); //Name not ControlName!! Assert.IsTrue(ribbonBarInside.TryFind()); var tabs = new WinTabPage(ribbonBarInside); var tab = tabs.FindMatchingControls().Where(t => (t as WinTabPage).AccessibleDescription.Trim() == "File").FirstOrDefault(); Assert.IsNotNull(tab); Mouse.Click(tab); var buttons = new WinButton(ribbonBarInside); var button = buttons.FindMatchingControls().Where(t => (t as WinButton).AccessibleDescription.Trim() == "Open").FirstOrDefault(); Assert.IsNotNull(button); //Mouse.Click(button); <-- this throw an Exception, next 2 lines solve this. Mouse.Location = new Point(button.Left + button.Width / 2, button.Top + button.Height / 2); Mouse.Click(); 

假设Pal Bognar的答案是正确的,我建议为这种情况创建自己的可重用类型。 这是一个例子。 将其设置为更通用并且具有在每个实例中具有实际按钮和菜单选项卡的子类将是简单的。

 public class WinRibbon : WinControl { protected WinMenuBar RibbonBarInside { get { var ribbonBarInside = new WinMenuBar(this.RibbonBar); ribbonBarInside.SearchConfigurations.Add(WinControl.PropertyNames.Name, "radRibbonBar"); return ribbonBarInside; } } public IEnumerable Tabs => new WinTabPage(this.RibbonBarInside).FindMatchingControls().OfType(); public WinControl FileTab => this.Tabs.FirstOrDefault(t => t.AccessibleDescription.Trim() == "File"); public IEnumerable Buttons => new WinButton(this.RibbonBarInside).FindMatchingControls().OfType(); public WinButton OpenButton => this.Buttons.FirstOrDefault(t => t.AccessibleDescription.Trim() == "Open"); public WinRibbon(UITestControl parent = null) : base(parent) { this.SearchProperties.Add(WinControl.PropertyNames.ControlName, "radRibbonBar"); } public void ClickOpenButton() { var openButton = this.OpenButton; // to prevent creating a new one each time Mouse.Location = new Point(openButton.Left + openButton.Width / 2, openButton.Top + openButton.Height / 2); Mouse.Click(); } }