MrFinch Ответов: 1

Нажмите меню "Файл", используя проблему элемента автоматизации


- Привет!
У меня есть странное поведение, которое я не могу понять, как решить.
Проблема в том, что я хотел бы нажать кнопку меню "Файл" в Lightroom (в блокноте она работает нормально), но Expand-pattern выдает исключение, хотя кнопка "файл" на самом деле поддерживает шаблон ExpandCollapse (по крайней мере Inspect.exe говорит так).

Ниже приведен краткий пример того, чего я пытаюсь достичь (обработка ошибок и другие вещи опущены для простоты):

private void ClickFileMenu()
    {
        try
        {
            // Application = Lightroom
            int processID = 4448;
           
            // Get root element (OK)
            var rootEelement = AutomationElement.RootElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ProcessIdProperty, processID));

            // Get 'File' menu element (OK)
            var fileMenuElement = rootEelement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "File"));

            // Get the expand/collapse pattern (and yes, it exist according to Inspect.exe)
            ExpandCollapsePattern expandPattern = ExpandCollapsePattern)fileMenuElement.GetCurrentPattern(ExpandCollapsePattern.Pattern); // (OK)

            // Expand (FAIL)
            expandPattern.Expand();
        }
        catch (Exception exception)
        {
            // Exception occur with message: "Operation cannot be performed."
            var error = exception;
        }
    }




Есть идеи, что я делаю не так?

С Уважением Мистер Финч

1 Ответов

Рейтинг:
2

Member 3385671

Как пользоваться:

 ElementWindows ew = new ElementWindows("My Window's Title");
          
ew.SelectMenu("My Main Menu Title", "My Menu Item");



В определенном классе:


private static void SelectMenu(AutomationElement rootElement, string Menu, string value)
       {
           AutomationElement lcMenu = rootElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, Menu));

           ExpandCollapsePattern exPat = lcMenu.GetCurrentPattern(ExpandCollapsePattern.Pattern) as ExpandCollapsePattern;
           exPat.Expand();

           AutomationElement itemToSelect = lcMenu.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, value));

           AutomationElement itemToSelect2 = itemToSelect.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.NameProperty, value));

           InvokePattern invokePattern = itemToSelect2.GetCurrentPattern(InvokePatternIdentifiers.Pattern) as InvokePattern;

           invokePattern.Invoke();
       }

       public void SelectMenu(string Menu, string value)
       {

           ElementWindows.SelectMenu(m_Windows, Menu, value);
           Thread.Sleep(50);
       }


- by Ccting, Sibu, Sarawak, Malaysia