mec
1
お世話になっております。
windowsのFileMakerProをつかっております。
そこでポップアップメニューを出すようにしているのですが、そのポップアップの複数ある項目をテキストを取って、最適な項目をクリックする必要があります。その項目テキスト取得がうまくできなくて適切な項目をクリック出来ないので困っております。
・やりたい事
ポップアップメニューの複数ある項目のすべてのテキストを取得して、目的の物をクリックする。
繰り返しでできるなら項目数も取得したい。
・出来ている事
ポップアップメニューのクリック自体はアプリレコーダーからできております。
・やったこと
クリック出来たメニューにインデックスの項目があったので変数にして繰り返してみたのですが、
クリックした項目のテキストしか取得できませんでした。
もし解決策をご存じでしたらご教示いただければと思っております。
Yoichi
(Yoichi)
2
こんにちは
そのメニューは動的に生成されるのでしょうか?
そうであれば、GetTextアクティビティなどでこれらのメニューを取得する必要があるかと思います。
セレクターでの指定はできている状況でしょうか?
スクリーンショットなども共有いただくとより良いかと思います。
1 Like
mec
3
お返事ありがとうございます。
・ポップアップメニューは動的に生成されます。ですので決まった値ではないです。
・GetTextアクティビティで文字列が取れているのですが値が変わらないです
アプリレコーダーでポップアップメニューをクリックするのを取得し、
それをターゲットメソッド「厳密セレクタ」にし、アプリレコーダで取った項目と思われるインデックスを変数にし(添付図1)、変数を変えるプログラムを組んで取得できるテキストをチェックしたのですが、取得したテキストが変わりません。
常に出ている表とかでしたら同じ方法で番号の値が取れることは確認しております。
いつも厳密セレクタで項目を指定し、最後に来るindexの値を変えてリスト項目を取得しています。
その時できるだけ automationidでインデックスを指定できない場合があるので使わないようにしているのですが、今回この automationid指定がインデックスを変化させても別な値が取れない原因かもしれないと考えております。
添付図1
Yoichi
(Yoichi)
4
こんにちは
操作対象のポップアップメニューのスクリーンショットと
UiExplorerを使って対象を選択したときの属性一覧等(のスクリーンショット)
共有可能でしょうか?
またメニュー全体を対象にすることによりメニュー内のすべての文字列が取得できないでしょうか?
状況によっては、それを用いて指定するアプローチもあるかもしれません。
mec
5
おはようございます。ご返信ありがとうございます。
結果から メニューの一番下の項目のテキストのみが取れていると思われます。
下の画像はUIExplororとポップアップメニューです。申し訳ございませんが、項目については隠してあります。
今回menu itemのidxを変数にしインクリしました。
・確認手順
1,UiExplorerからidxを増やすと項目が順番に取れることを確認
2,menu itemの idxを変数にする
3,テキストを取得アクティビティで idxの値と取れた値を表示
ログ(内容は業務支障無いよう変更してあります)
ABCの3項目がポップアップで出てCが一番下だとすると以下の感じで出てきます。
idx = 1 C
idx = 2 C
idx = 3 C
idx = 4 C
4番目は項目にないはずですが、項目数を超えても文字列が取得できます。この後もずっとエラーにならず取得できます。
アドバイスいただいた、popupmenuのテキスト取得ですが、「テキストを取得」アクティビティで試したところ「コンテキスト」と帰ってきます。
なにかお気づきの点がございましたらご指導いただければと思います。
Yoichi
(Yoichi)
6
こんにちは
黒塗りが多いのでよくわかりませんが、取りうる属性はrole以外はなさそうということでしょうか?
アドバイスいただいた、popupmenuのテキスト取得ですが、「テキストを取得」アクティビティで試したところ「コンテキスト」と帰ってきます。
モダンのGetTextアクティビティを使っているのでしたら、ScraingMethodプロパティをNativeにして試せますでしょうか?(メニュー全体を選択ください)
クラシックの場合は、GetVisibleTextになります。
mec
8
お世話になっております。お返事が遅くなり申し訳ございません。
ポップアップメニューと一緒にキャプチャしたのでわかりにくくなりました。
menu itemの項目は automationidとroleの2つになります。
片方ずつ選択すると
ctrl automationid=‘1’
や
ctrl role=‘menu item’ idx=‘1’
のような表示になります。(数字は任意)
このidxを変えても常にメニューの最後のmenu itemのテキストの値が取れているようです。
popupmenuのテキスト取得ですが、
ScraingMethodをNativeにしたら全部取得できました。
もしかしたらと思い、menu itemのScraingMethdをNativeにしたのですが、
やはりmenu itemの一番最後の項目のテキストが取得されています。
UIExplorerでmenu itemのインデックスを変更すると選択項目が変わることも確認しているのに理由がわからないです。
Yoichi
(Yoichi)
9
おそらく改行区切りで取得できていると思うので、
それで個々のメニューの文字列が取得できていると思います。
これをクリックするにはクリックのNativeモードを使用し、メニューの文字列から
クリックする箇所を特定します。
具体的には、セレクターはメニュー全体を指定し
以下の様にモードをNativeにした上で、NativeTextに対象文字列をセットします。
入力メソッドはHardwareEventにします。
1 Like
mec
10
おはようございます。お返事ありがとうございます。
結果からお伝えいたします
ポップアップメニューが1項目の場合はクリックに成功します。
複数項目の場合は目的のテキストの1つ下の項目がクリックされます。
ご指導の通りターゲットメソッドにネイティブテキストを加え、ネイティブテキストを変数にしてテキストを探すようにしました。
・ネイティブテキストの変数内容は選択直前でメッセージログアクティビティにて出力し、変数の内容が正しいことを確認しております。
・ターゲットメソッドに厳密セレクタが入っているのはポップアップメニューの選択のためです。これを入れないとエラーになりました。厳密セレクタには前回テキスト取得に成功した同じターゲットに設定してあります。
ご迷惑をおかけしておりますが、なにかお気づきの点がございましたらお教えいただければと思います。
Yoichi
(Yoichi)
11
こんにちは
原因の切り分けの一つとして
クラシックのClick Textアクティビティでどうなるか試せますでしょうか?
mec
12
お世話になっております。いつもご返答いただきありがとうございます。
取り急ぎご報告いたします。
ClassicのClick Textだと目的のメニューアイテムをクリックすることができました。
個数的に2,3の項目でしか確認していないので時間ができ次第もうちょっと確認してみようと思います。
あと、インデックスでmenu itemを取得した場合にテキストが最後の項目になっている問題も、classicアクティビティにあるのなら時間ができ次第確認してみようと思います。
いろいろとありがとうございました。大変感謝しております。
Yoichi
(Yoichi)
13
こんにちは
ClassicのClick Textだと目的のメニューアイテムをクリックすることができました。
となりますと、モダンのNClickアクティビティの仕様・使い方の問題ですね。
手元で確認しましたが、StrictSelctorと併用すると、StrictSelectorが優先されてしまい、StrictSelectorの中央をクリックする模様です。上記の事象と合致するのではないでしょうか?
この場合、(制約上仕方が無いのですが)StrictSelectorは指定せず、Windowセレクターのみとすることにより、実現できるかもしれません。
(要素を画面上で指定するときに、NativeTextを有効にして、テキスト部分を選択すると、警告は出ないと思います)
上記の場合、当該ウインドウ全体が対象となりますが、このような制約が好ましくない場合は、クラシックのClick Textの方が良いかもしれません。
あと、インデックスでmenu itemを取得した場合にテキストが最後の項目になっている問題も、classicアクティビティにあるのなら時間ができ次第確認してみようと思います。
こちらはセレクターの問題なので、クラシックでも問題解消する可能性は低そうですが、結果共有いただければと思います。
1 Like