1

リストされているすべてのオプションを試しましたが、白を使用しているペインコントロール内でリボンが見つかりません。VisualUIAVerifyはそれをツリーで表示しますが。

"window" "Test 0.0.1" "MainForm"
  |--"pane" "Dock Top" "_MainForm_Toolbars_Dock_Area_Top"
    |--"" "Ribbon" ""
      |--"tab" "Ribbon Tabs" ""
        |--"tab item" "Tools" ""

タブ項目「ツール」のクリックを自動化したい。しかし、「ペイン」しか見つけることができません

import clr
import sys
sys.path.append(r"C:\TEMP\white")
clr.AddReference("White.Core")
clr.AddReference("White.NUnit")
from White.NUnit import *
from White import *
from White.Core import *
from White.Core.Configuration import *
from White.Core.UIItems import *
from White.Core.UIItems.WindowItems import *
from White.Core.UIItems.ListBoxItems import *
from White.Core.UIItems.Container import *
from White.Core.UIItems.Finders import *
from White.Core.Factory import *
from White.Core.Finder import *
from White.Core.AutomationElementSearch import *
from White.Core.WindowsAPI import *

from System.Diagnostics import Process
wp= Process();
wp.StartInfo.FileName = r"c:\TEMP\gui\TestShell.exe";
wp.StartInfo.Arguments = r"TestShell.taco -e DBA -s qa";        
wp.Start();
wapp = Application.Attach( wp );
wnds=Application.GetWindows(wapp)
wnd=wnds[0]

#test
>wnd.Name
"Test 0.0.1"

[ツール]提供の座標(IronPython)タブをクリックすることもできます。

def click(cp,mouse,x,y):
    cp = wnd.Bounds.TopLeft;
    cp.Offset(x, y);
    mouse = Desktop.Instance.Mouse;
    mouse.Location = cp;
    mouse.Click(cp);

cp = wnd.Bounds.TopLeft;
mouse = Desktop.Instance.Mouse;
mouse.Location = cp;
mouse.Click(cp);
click(cp,mouse,120,50) #tools

ペインへのアクセス:

pn=wnd.GetElement(SearchCriteria.ByAutomationId("_MainForm_Toolbars_Dock_Area_Top"));

リボンを見つけるために結ぶ

rbn=pn.GetElement(SearchCriteria.ByAutomationId("Ribbon"));

またはすべての子供を見つける

pn.FindAll(TreeScope.Children,  Condition.TrueCondition)

何も機能していないようです。

4

1 に答える 1

0

表示されている不整合は、UIA Verify が UIA ライブラリのネイティブ COM バージョンを使用し、白がまだ古いマネージ ライブラリを使用しているという事実の結果である可能性があります。

私の経験では、ネイティブ ライブラリは古いマネージド ライブラリよりも高速で、安定性が高く、互換性が高い傾向があるため、コードを移行してそれを使用することを検討する必要があります (または、寛大な気持ちがある場合は、コードをGitHub の white に寄付してください)。更新します)。

自分でその移行を行ってからしばらく経っているので、詳細を思い出すことはできませんが、基本的には、.NET アプリケーションがネイティブ UIA メソッドを呼び出せるようにする相互運用 DLL を作成する必要があります。次に、必要に応じて独自のラッパー ライブラリを作成するか、以下のいずれかを使用できます。

移行を行う際の参考として、以下を参照することをお勧めします。

UI オートメーション COM-to-.NET アダプター- COM API のラッパーを作成する初期の試み。私はこれをまっすぐに使用するのに苦労しましたが、最初に見てみると役に立ちました. また、このラッパーの開発者によって作成された COM API に関する MSDN サポート フォーラムの投稿を検索してください。残念ながら、StackOverflow担当者が少ないため、それらにリンクできません(長年の潜伏者、初めての回答者)。

UIA Verify Source Code - COM インターフェイスへのアクセスに使用される UIAComWrapper がソース コードに含まれていることがわかります。そのプロジェクトで、相互運用 DLL をどのように作成しているかを確認することもできます。

于 2012-11-27T23:18:17.640 に答える