Webページ上のボタン押下可否を判定する方法

お世話になります。超初心者です。

Webページ上のボタンの押下可否を判定して、押せるようになるまで待つ方法を探しています。
Get Attributeを使えばボタンの状態を取得できそうですが、具体的にどうすれば良いかわかりません。よろしくお願い致します。

投稿時に日本語がおかしくなったので、再投稿します。

お世話になります。超初心者です。

Webページ上のボタンの押下可否を判断して、押せる状態になるまで待つ方法を探しています。
Get Attributeを使えばボタンの状態を取得できそうですが、どうすればいいかわかりません。よろしくお願いします。

まず、日本語の文章を正しく投稿する方法が知りたいです・・・

Webページ上のボタンの押下可否を判断して、押せる状態になるまで待つ方法を探しています。

私はこの声明と混同しています。
あなたはこれについてもう少し詳しく話してください。

クリックするボタンがあるまで待つのですか?
その場合、Elimentが存在するプロパティを使用します。
それはブール値trueまたはfalseを与えます。 その値を取得したら、ボタンをクリックします。 同じ要素が存在するアクティビティをループする場合は、そのボタンをクリックします。

私のインプットが役に立つと願って

image

インタラクティブな選択

ありがとうございます。試してみます。

すみません。

「ボタンが存在するかどうか」ではなく、「ボタンが押せる状態かどうか」を判定したいのです。

@tosh さん、こんにちは
対象のWebページ上のボタンが昔からあるフォームのボタン(下記のようなhtml)
<input name="Button1" type="button" value="button" disabled="disabled" />
であればGet Attributeアクティビティのアトリビュート名を**“disabled”**にすると検知できました。
ただし、最近のイケてるサイトが使っているBootstrapなどのフレームワークでinputタグではなくCSSなどで擬似的にボタンを作っているケースでこれが正しく動くのかあやしいです。

2 Likes

tangoさん、回答ありがとうございました。

実際にやってみました。
エラーにはなりませんでしたが、OutputのResultに設定した変数が初期値から変化せず、
結果が取得できていないようです。

問題のボタンのセレクターと外観は以下のようになっています。

image

※自分で投稿した文章の日本語が変だと思ったのは、翻訳されたページを見ていたためでした。お騒がせしました。

@tosh

その問題ボタンについて、 ページのソースコードを見てみれば <input type="button"> になっていますか。
@tango 様が仰った通り、CSSの擬似的にボタンになっていることであればGetAttributeが使えない場合もあります。
こちらも検証しますが、そのボタンの種類について教えて頂ければと思います。

Htmlの知識がなく申し訳ないのですが、
Webページのソースを表示したところ、問題のボタンの記述は以下のようになっていました。
(転記する際、先頭の「<」は削除しました。)

button id=“downloadButton” type=“button” onclick=“javascript:saveResultToSpreadsheet();”
class=“btn span disabled” disabled=“true”>
i class=“icon-si-inbox”>
span id=“SRCH_02_SaveResultsAs” class=“localizable”>…で保存
/button>

@tosh

ご確認ありがとうございました。
普通のボタンだそうですね。

ボタンの押下可否を判断することにはGetAttributeが使えますが、属性のDisabledではなく、aastateという属性を確認すればクリックできるかどうかわかります
aastatefocusableunavailableになりますが、日本語だとフォーカスできます。利用できません。の値になります。ちなみに、UiExplorerでこの値をご確認いただけます。

また、ボタンを押下できるまで待ちたいということであれば、GetAttributeではなくWaitAtributeを使うことお勧めします。

ご参考のため、例を添付します:GetAttributeWebForm.xaml (13.1 KB)
WaitAttributeWebForm.xaml (10.3 KB)

2 Likes

サンプルまで付けていただき、ありがとうございます。
この方法で試してみます。

頂いたサンプルと同様に、FindElementでボタンを取得し、WaitAttributeでaastateの値が"focusable"になるまで待つようにしましたが、期待した動作にはなりませんでした。

GetAttributeでaastateの値を取得すると「見えません。, 画面の表示領域を超えています。」になっていました。
ボタンが画面外にある場合はそのように出るのでしょうか?
「フォーカスできます。」にするには、ボタンが画面内にないといけないのでしょうか?

結果を報告します。

DoWhileを使い、GetAttributeでボタンから取得したaastateの値が「利用できません。」ではなくなるまで待ち、その後ボタンが見える位置までキー入力で画面をスクロールする様にして解決しました。

aastateの値が、ボタンが画面上の見える位置にあるかどうかによって「フォーカスできます。」または「見えません。, 画面の表示領域を超えています。」の2通りに分かれるため、WaitAttributeは使いませんでした。

それにしても、aastateの内容は本当に日本語の文字列だったんですね・・・
最初、表示上そうなっているだけだと思い込んでいたので、ループ条件が合わず悩みました。

皆様のご助力感謝いたします。ありがとうございました。

Hi @Mateus_Cruz
disabledではなくaastateでなければならない理由は何でしょうか?
私は、inputタグでもbuttonタグでもdisable属性がGet Attributeで取得できています。
理由が知りたいです。
disabledButton

@tango

ブラウザー上でDisabledが使えますが、デスクトップアプリでDisabledという属性がありません(UiExplorerでご確認いただけます)。
一方、aastateはブラウザー上でもデスクトップでも利用できますので、aastateの方お勧めします。

なるほど、理解しました。
私がaastateを躊躇うのは、aastateがbooleanや定数ではなく、ローカライズされたメッセージの組み合わせであることです。
今のところUiPath Studioはローカライズされていませんが、このメッセージだけ日本語になるのも不思議ですね。