isaketranjan Ответов: 1

Как автоматизировать опцию "Открыть с помощью" окна загрузки файлов в internet explorer


Попытка автоматизировать окно IE, которое появляется при загрузке любого файла,
нужно нажать на опцию "Открыть с помощью", которая является частью SplitButton,

<img src='https://i.stack.imgur.com/XJMJp.png'/>


Не удалось найти опцию "Открыть с помощью" в качестве дочернего/потомка окна, хотя остальные кнопки можно было легко найти.

Что я уже пробовал:

Tried recursively find the window, but NO SUCCESS

FindTreeViewDescendants(elementNode)
{
 AutomationElement elementNode = TreeWalker.ControlViewWalker.GetFirstChild(targetTreeViewElement);

        while (elementNode != null)
        {
            // Test for the control patterns of interest for this sample.
            object objPattern;
            ExpandCollapsePattern expcolPattern;
            if (true == elementNode.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out objPattern))
            {
                expcolPattern = objPattern as ExpandCollapsePattern;
                if (expcolPattern.Current.ExpandCollapseState != ExpandCollapseState.LeafNode)
                {
                    ExpandCollapsePattern expandPattern = ((ExpandCollapsePattern)expcolPattern);
                    if (expandPattern.Current.ExpandCollapseState != ExpandCollapseState.Expanded)
                        expandPattern.Expand();
                }
            }
            TogglePattern togPattern;
            if (true == elementNode.TryGetCurrentPattern(TogglePattern.Pattern, out objPattern))
            {
                togPattern = objPattern as TogglePattern;
                TogglePattern expandPattern = ((TogglePattern)togPattern);
                if (expandPattern.Current.ToggleState != ToggleState.On)
                    expandPattern.Toggle();
            }
            InvokePattern invPattern;
            if (true == elementNode.TryGetCurrentPattern(InvokePattern.Pattern, out objPattern))
            {
                if (elementNode.Current.Name == "Open with")
                {
                    invPattern = objPattern as InvokePattern;
                    InvokePattern expandPattern = ((InvokePattern)invPattern);
                    expandPattern.Invoke();
                }
            }

            // Iterate to next element.
            // elementNode - Current element.
            // treeviewIndex - Index of parent TreeView.
            FindTreeViewDescendants(elementNode);
            elementNode = TreeWalker.ControlViewWalker.GetNextSibling(elementNode);

1 Ответов

Рейтинг:
2

OriginalGriff

Вы не можете - у вас нет контроля над тем, что клиентский браузер делает с загрузкой: понятно, что это вещь безопасности, чтобы предотвратить нежелательные загрузки, способные автоматически выполнять и устанавливать вредоносные программы.


isaketranjan

Но есть инструменты, например, Processrobot Softomotive, uipath, который делает то же самое,
Так что, не могу-я думаю, это не ответ. Вы видели ссылку на изображение, которую я прикрепил ?
И только пункт меню split button не извлекается, иначе я могу найти кнопку Open, открыть папку, просмотреть кнопки загрузки.
И большое спасибо за Ваш быстрый ответ, Пожалуйста, помогите мне в этом, так как я застрял на нем уже несколько дней

Dave Kreskowiak

Опять же, вы не можете выбрать приложение для клиента.

Все, что вы можете сделать, это указать правильный тип MIME для загрузки в коде на стороне сервера. Тип MIME указывает браузеру, что делать с только что загруженным содержимым. Если на стороне клиента установлен обработчик с зарегистрированными типами MIME, которые он может обрабатывать, браузер может сообщить системе, чтобы она запустила обработчик с указанием пути к загруженному содержимому.

ЭТО СТЕПЕНЬ КОНТРОЛЯ, КОТОРЫЙ ВЫ ИМЕЕТЕ НАД ТЕМ, КАК БРАУЗЕР ОБРАБАТЫВАЕТ СОДЕРЖИМОЕ.

isaketranjan

Предоставление типа MIME не является для меня вариантом,мой проект, над которым я работаю, является инструментом автоматизации, и пользователь может выбрать любое окно(приложение), кнопку, кнопку разделения, а также использовать SENDKEY не является для меня вариантом, я использую Microsoft uiautomationclient.dll для того же самого.