CODEDUI c# 无法点击 SharePoint 功能区控件

CODEDUI c# Cannot clickSharePoint Ribbon Control

作为自动化测试的一部分,我无法单击 SharePoint 功能区以 select "Alert Me" 控件。我收到以下错误:

结果信息: 测试方法 CodedUITestProject2.CodedUITest1.SetAlert 抛出异常: Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPerformActionOnHiddenControlException: 无法对隐藏控件执行'Click'。额外细节: 技术名称:'Web' 控件类型:'Hyperlink' 标记名称:'A' 编号:'Ribbon.Library.Share.AlertMe.Menu.Scope.AlertLibrary-Menu16' 姓名: '' 目标: '' 内文:'Set alert on this library' ---> System.Runtime.InteropServices.COMException:HRESULT 异常:0xF004F002

请在下面找到我的代码:1. 和 2. 工作,但在 3 处出错。我尝试添加和减去不同的控制设置。

//1。 Select 功能区上的库选项卡

        UITestControl CLR = new UITestControl(browser);
        CLR.TechnologyName = "Web";
        CLR.SearchProperties.Add("InnerText", "LibraryLibrary Tools group. Tab 2 of 2.");
        CLR.WaitForControlReady();
        Mouse.Click(new Point(CLR.BoundingRectangle.X +   CLR.BoundingRectangle.Width / 2, CLR.BoundingRectangle.Y + CLR.BoundingRectangle.Height / 2));
        CLR.WaitForControlReady();
        //Mouse.Click(CLR);
        Playback.Wait(3000);

        //2. set focus on the a pane control on the ribbon    

        UITestControl FRL = new UITestControl(browser);
        FRL.TechnologyName = "Web";
        FRL.SearchProperties.Add("TagName", "SPAN");
        FRL.SearchProperties.Add("ControlType", "Pane");
        FRL.SearchProperties.Add("Class", "ms-cui-groupTitle");
        FRL.SearchProperties.Add("InnerText", "Share & Track");
        FRL.WaitForControlExist();
        FRL.SetFocus();
        Mouse.Click(new Point(FRL.BoundingRectangle.X + FRL.BoundingRectangle.Width / 2, FRL.BoundingRectangle.Y + FRL.BoundingRectangle.Height / 2));
        Playback.Wait(3000);


        //3. Click on "Alert Me" ID 
        UITestControl AM = new UITestControl(browser);
        AM.TechnologyName = "Web";            
        //AM.SearchProperties.Add("Inner Text", "Alert Me");
        AM.SearchProperties.Add("Id", "Ribbon.Library.Share.AlertMe-Large");
        AM.WaitForControlReady();
        Mouse.Click(new Point(AM.BoundingRectangle.X + AM.BoundingRectangle.Width / 2, AM.BoundingRectangle.Y + AM.BoundingRectangle.Height / 2));
        Playback.Wait(2000);

这是 SharePoint 自动化经常发生的事情。 有两个原因可能会阻止您点击 "Alert Me" link。 1. Alert me 保存在 parent 下,你正试图直接点击。 2. 存在两个相同的元素,其中一个隐藏,另一个可见。

第二个原因我会给出代码,如果不行那么你可以尝试按照父子层次结构点击,这很容易自己完成。

UITestControl AM = new UITestControl(browser);
//AM.TechnologyName = "Web";            
//AM.SearchProperties.Add("Inner Text", "Alert Me");
AM.SearchProperties.Add("Id", "Ribbon.Library.Share.AlertMe-Large");
AM.WaitForControlReady();
UITestControlCollection uic=AM.FindMatchingControls();
foreach(UITestControl ui in uic)
{
if(ui.BoundingRectangle.Width !=-1)
{
Mouse.Click(ui);
break;
}
}

试试上面的代码。否则遵循父子关系。此外,不建议一直使用 UITestControl 来识别元素,请尝试使用特定的 class 名称,例如,如果您尝试单击 hyperlink 而不是 UITestControl,请使用 HtmlHyperlink class 以便您可以使用所有可能的属性来标识元素。这是我遵循的最佳做法。