質問: C# で UI Automation を使って、 あるアプリケーションを操作しています。 ボタンを押したり、テキストボックスへの入力など基本的なことは問題なくできています。 しかし、タブコントロールの内側の要素を取得だけができず困っています。 Inspect や UIA Verify で確認してもタブコントロールのヘッダ部分(クリックすると選択してるタブが切り替わるボタンみたいなところ)はあるのですが内側の本体が表示されていません。 ググってみると TabItem の中に Pane があって中身の要素がありそうです。 また、.net4.5でコンパイルするとタブのペインが見れなくなった のようなことを書いたページもありました。 UI Automation 自体の情報は少なくはなく、タブはよく使われるものだと思うのでタブ内の要素が見れないとなれば重大な問題でもっと情報があるように思うのですが、実際はほとんど情報がないです。 今のところ、タブ内の要素を指定するために座標指定でクリックアクションを起こしたり、タブキーを数回 `SendKey` で入力してフォーカス要素を取得するようにしています。 UIAutomation はテストにも使われるツールのようなので、デザインが変わる度に大きく変更が必要になる、座標指定やタブキーを押した数で目的の要素を取得するのが正しい使い方とは思えないのです。 どうにかしてタブの内側のツリーから要素を取得できないのでしょうか?
回答: > > タブ内の要素が見れないとなれば重大な問題 > > > おっしゃるとおりだと思います。質問文の2つ目のページを眺めていたのですが、そこからたどれる以下のページ(下記)をみつけました。このページの回答にTabControlの下位のノードが見えない原因とその回避が書いているように見えました。しかし回避策がTabControlのサブクラスで実装を一部変更するといった内容なので一般に適用できないのかも知れません。このページに一般的なAutomationのpeerについての情報ページのリンクがあるようですのでこのあたり調べられてはいかがでしょうか。 StackOverflow:Some controls on a page are not visible for MS UI Automation バグレベルの問題なのか仕様なのか難しそうです。どうなんだろう・・・