0

Я хотел бы автоматически войти в Chrome на Windows, часть Selenium выполнена, но теперь есть окно, которое необходимо автоматизировать , Вызов кнопки данных Link. Кажется, я нахожу правильный элемент с моим кодом, и он пытается вызвать, но безрезультатно.Chrome. Net Ui Automation - Автоматический вход в браузер - AutomationElement Invoke появляется, чтобы вызывать без результата

Ниже фрагменте кода из WPF:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.Windows.Automation; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

namespace Chrome_WPF_SSO 
{ 

    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     public InvokePattern GetInvokePattern(AutomationElement element) 
     { 
      return element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern; 
     } 

     public MainWindow() 
     { 
      InitializeComponent(); 

      //1 
      var Chrome = Process.GetProcessesByName("chrome"); 
      if (Chrome.Length <= 0) { } 

      else 
      { 
       foreach (var cp in Chrome) 
       { 
        if (!(cp.MainWindowHandle == IntPtr.Zero)) 
        { 

         //To find the tabs we first need to locate something reliable - the 'New Tab' button 
         AutomationElement rootElement = AutomationElement.FromHandle(cp.MainWindowHandle); 
         System.Windows.Automation.Condition condNewTab = new PropertyCondition(AutomationElement.NameProperty, "Google Chrome"); 


         System.Windows.Automation.Condition condCustom = new PropertyCondition(AutomationElement.NameProperty, "Link your Chrome data to this account?"); 
         AutomationElementCollection allNames = rootElement.FindAll(TreeScope.Descendants, condCustom); 
         TreeWalker tWalker2 = TreeWalker.ControlViewWalker; 

         System.Windows.Automation.Condition LinkData = new PropertyCondition(AutomationElement.NameProperty, "Link data"); 
         AutomationElementCollection elementscoll = rootElement.FindAll(TreeScope.Descendants, LinkData); 

         foreach (AutomationElement a in elementscoll) 
         { 

          if (a.Current.LocalizedControlType.ToString() == "button") 
          { 
           try 
           { 
            ((InvokePattern)a.GetCurrentPattern(InvokePattern.Pattern)).Invoke(); 


           } 

           catch (Exception ex) 
           { 
            MessageBox.Show(ex.Message); 
           } 

          } 

         } 
        } 


       } 


      } 
     } 
    } 
} 

С inspect.exe инструмента Win SDK:

 How found: Selected from tree... 
Name: "Link data" 
ControlType: UIA_ButtonControlTypeId (0xC350) 
LocalizedControlType: "button" 
BoundingRectangle: {l:740 t:271 r:816 b:304} 
IsEnabled: true 
IsOffscreen: false 
IsKeyboardFocusable: true 
HasKeyboardFocus: false 
AcceleratorKey: [Not supported] 
AccessKey: "" 
ProcessId: 4832 
RuntimeId: [Not supported] 
AutomationId: [Not supported] 
FrameworkId: [Not supported] 
ClassName: [Not supported] 
NativeWindowHandle: [Not supported] 
IsControlElement: [Not supported] 
IsContentElement: [Not supported] 
ProviderDescription: "[pid:4832,hwnd:0x0 Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]" 
IsPeripheral: [Not supported] 
AriaRole: [Not supported] 
AriaProperties: [Not supported] 
LiveSettingProperty: [Not supported] 
IsPassword: false 
ItemStatus: [Not supported] 
ItemType: [Not supported] 
IsRequiredForForm: [Not supported] 
IsDataValidForForm: [Not supported] 
HelpText: "LabelButton" 
LabeledBy: [Not supported] 
DescribedBy: [Not supported] 
ControllerForProperty: [Not supported] 
FlowsTo: [Not supported] 
FlowsFrom: [Not supported] 
ClickablePoint: [Not supported] 
Culture: [Not supported] 
Orientation: [Not supported] 
OptimizeForVisualContent: [Not supported] 
Annotation.AnnotationAuthor: [Not supported] 
Annotation.AnnotationTypeId: [Not supported] 
Annotation.Author: [Not supported] 
Annotation.DateTime: [Not supported] 
Annotation.Target: [Not supported] 
Drag.DropEffect: [Not supported] 
Drag.DropEffects: [Not supported] 
Drag.GrabbedItems: [Not supported] 
Drag.IsGrabbed: [Not supported] 
Dock.DockPosition: [Not supported] 
DropTarget.DropTargetEffect: [Not supported] 
DropTarget.DropTargetEffects: [Not supported] 
ExpandCollapse.ExpandCollapseState: [Not supported] 
Grid.ColumnCount: [Not supported] 
Grid.RowCount: [Not supported] 
GridItem.Column: [Not supported] 
GridItem.ColumnSpan: [Not supported] 
GridItem.ContainingGrid: [Not supported] 
GridItem.Row: [Not supported] 
GridItem.RowSpan: [Not supported] 
LegacyIAccessible.ChildId: 0 
LegacyIAccessible.DefaultAction: "" 
LegacyIAccessible.Description: "" 
LegacyIAccessible.Help: "LabelButton" 
LegacyIAccessible.KeyboardShortcut: "" 
LegacyIAccessible.Name: "Link data" 
LegacyIAccessible.Role: push button (0x2B) 
LegacyIAccessible.State: focusable (0x100000) 
LegacyIAccessible.Value: [Not supported] 
MultipleView.CurrentView: [Not supported] 
MultipleView.SupportedViews: [Not supported] 
ObjectModel.UnderlyingObjectModel: [Error: calling getter for this property: hr=0xFFFFFFFF80070057 - The parameter is incorrect.] 
RangeValue.IsReadOnly: [Not supported] 
RangeValue.LargeChange: [Not supported] 
RangeValue.Maximum: [Not supported] 
RangeValue.Minimum: [Not supported] 
RangeValue.SmallChange: [Not supported] 
RangeValue.Value: [Not supported] 
Selection.CanSelectMultiple: [Not supported] 
Selection.IsSelectionRequired: [Not supported] 
Selection.Selection: [Not supported] 
SelectionItem.IsSelected: [Not supported] 
SelectionItem.SelectionContainer: [Not supported] 
Scroll.HorizontallyScrollable: [Not supported] 
Scroll.HorizontalScrollPercent: [Not supported] 
Scroll.HorizontalViewSize: [Not supported] 
Scroll.VerticallyScrollable: [Not supported] 
Scroll.VerticalScrollPercent: [Not supported] 
Scroll.VerticalViewSize: [Not supported] 
SpreadsheetItem.AnnotationObjects: [Not supported] 
SpreadsheetItem.AnnotationTypes: [Not supported] 
SpreadsheetItem.Formula: [Not supported] 
Style.ExtendedProperties: [Not supported] 
Style.FillColor: [Not supported] 
Style.FillPatternColor: [Not supported] 
Style.FillPatternStyle: [Not supported] 
Style.Shape: [Not supported] 
Style.StyleId: [Not supported] 
Style.StyleName: [Not supported] 
Value.IsReadOnly: [Not supported] 
Value.Value: [Not supported] 
Table.ColumnHeaders: [Not supported] 
Table.ItemColumnHeaderItems: [Not supported] 
Table.ItemRowHeaderItems: [Not supported] 
Table.RowHeaders: [Not supported] 
Table.RowOrColumnMajor: [Not supported] 
Toggle.ToggleState: [Not supported] 
Transform.CanMove: [Not supported] 
Transform.CanResize: [Not supported] 
Transform.CanRotate: [Not supported] 
Transform2.CanZoom: [Not supported] 
Transform2.ZoomLevel: [Not supported] 
Transform2.ZoomMinimum: [Not supported] 
Transform2.ZoomMaximum: [Not supported] 
Window.CanMaximize: [Not supported] 
Window.CanMinimize: [Not supported] 
Window.IsModal: [Not supported] 
Window.IsTopmost: [Not supported] 
Window.WindowInteractionState: [Not supported] 
Window.WindowVisualState: [Not supported] 
IsAnnotationPatternAvailable: [Not supported] 
IsDragPatternAvailable: [Not supported] 
IsDockPatternAvailable: false 
IsDropTargetPatternAvailable: [Not supported] 
IsExpandCollapsePatternAvailable: false 
IsGridItemPatternAvailable: false 
IsGridPatternAvailable: false 
IsInvokePatternAvailable: true 
IsItemContainerPatternAvailable: false 
IsLegacyIAccessiblePatternAvailable: true 
IsMultipleViewPatternAvailable: false 
IsObjectModelPatternAvailable: [Not supported] 
IsRangeValuePatternAvailable: false 
IsScrollItemPatternAvailable: false 
IsScrollPatternAvailable: false 
IsSelectionItemPatternAvailable: false 
IsSelectionPatternAvailable: false 
IsSpreadsheetItemPatternAvailable: [Not supported] 
IsSpreadsheetPatternAvailable: [Not supported] 
IsStylesPatternAvailable: [Not supported] 
IsSynchronizedInputPatternAvailable: false 
IsTableItemPatternAvailable: false 
IsTablePatternAvailable: false 
IsTextChildPatternAvailable: [Not supported] 
IsTextEditPatternAvailable: [Not supported] 
IsTextPatternAvailable: false 
IsTextPattern2Available: [Not supported] 
IsTogglePatternAvailable: false 
IsTransformPatternAvailable: false 
IsTransform2PatternAvailable: [Not supported] 
IsValuePatternAvailable: false 
IsVirtualizedItemPatternAvailable: false 
IsWindowPatternAvailable: false 
FirstChild: "" image 
LastChild: "Link data" text 
Next: [null] 
Previous: "Cancel" button 
Other Props: Object has no additional properties 
Children: "" image 
    "Link data" text 
Ancestors: "" 
    "" 
    "Link your Chrome data to this account?" 
    "Log in - company.com Ltd - Google Chrome" window 
    "Desktop" 
    "Desktop" window 
    [ No Parent ] 

ответ

1

Ваш код кажется нормально для меня. Есть ли исключения? пожалуйста, дайте мне знать, если да.

В случае, если у вас нет каких-либо исключений, кнопка не реализует InvokePattern правильным способом. (Способ, которым он реализован, относится к тестируемому приложению (AUT) и более определенному для фактического UI Automation Provider этого элемента.) - например: поставщик указывает шаблону вызова вызвать щелчок правой кнопкой мыши, а не щелкнуть левой кнопкой мыши в фон, который, к сожалению, не может быть изменен извне.

обходного на что (в случае, если вы не можете изменить AUT) является использование прямоугольника или clickablePoint propertery. Переместите курсор в это место и имитируйте щелчок (например, «user32.dll»). Позаботьтесь о том, чтобы ваше окно находилось на переднем плане (что ограничивает ваш сценарий параллельным выполнением нескольких приложений!)

В случае, если вы можете изменить AUT, лучше всего вникнуть в документацию поставщика автоматизации пользовательского интерфейса или найти некоторые учебник по этому вопросу.

+0

спасибо, что пользователь32.dll сделал это для меня, мне нужно было сделать все это за пределами селена в любом случае, поскольку мне нужно было взаимодействовать с настоящим хром! – user219396

Смежные вопросы