Quicktest Pro - テキストが一致した後に最初のボタンを検索します
-
09-09-2019 - |
質問
動的オブジェクト認識 (記述プログラミング) を使用して、特定のテキストの後に表示される「削除」というラベルの付いた最初のボタン (たとえば、テキスト「Item XYZ-123」の後に表示される最初の削除ボタン) を見つけたいと考えています。テキストとボタンの両方が Web テーブルの 1 行内にある場合にそれを行う厄介な方法がありますが、よりエレガントで信頼性の高いソリューション (できればテーブルに依存しないソリューション) を期待していました。
ドキュメントでは、Firefox 内ではなく IE 内でテストする場合に .Object プロパティのみが DOM オブジェクトを返すと主張しているため、.Object プロパティの使用は避けたいと思います。
ありがとう!
解決
これを使用する解決策は次のとおりです。 sourceIndex
属性、注意してください sourceIndex
は IE のみのプロパティですが、QTP は Firefox 上でこれをシミュレートするため、同じスクリプトが両方のブラウザで動作します。次のような座標ベースのプロパティの使用を選択できます。 abs_x
そして abs_y
もし source_index
請求書に適合しません。
以下のコードは、質問に答えるものであり、それを一般的な関数にしていますが、読者のための演習として残されています ;o)
''#1. Create description for locator text
Set textD = Description.Create()
textD("micclass").Value = "WebElement"
textD("innertext").Value = ".*Item XYZ-123.*"
''#2. Find locator sourceIndex
set texts = Browser("B").Page("P").ChildObjects(textD)
Set text = texts(texts.Count-1) ' Take last text '
textIdx = text.GetROProperty("source_index") ' works for FF too '
''#3. Create description for button
Set buttonD = Description.Create()
buttonD("micclass").Value = "WebButton"
buttonD("value").Value = "Delete"
Set btns = Browser("B").Page("P").ChildObjects(buttonD)
''#4. Find first button after locator text
For i = 0 To btns.Count
If btns(i).GetROProperty("source_index") > textIdx Then
btns(i).Click ' Or whatever you want to do with it '
Exit For
End If
Next
このソリューションについて注意すべき点は次のとおりです。
- テキストを含む要素については何も想定しません。これが要素内のテキスト全体であることがわかっている場合は、
.*
パフォーマンスをさらに向上させるために「html タグ」を追加したり、あるいはその両方を実行したりできます。- そのため、説明に適合する最後の要素を選択し、最初の要素が
BODY
等
- そのため、説明に適合する最後の要素を選択し、最初の要素が
- テキストの説明では、デフォルトで「micclass」 = 「WebElement」と指定する必要があります。
ChildObject
フィルターで除外するWebElement
それらは面白くないと仮定しています。
他のヒント
それを行うための簡単な方法がないと仮定すると、あなたはHTMLを解析してみてください可能性があります。 HTMLでの検索テキストを検索し、以降、「削除」ボタンのために、その時点からHTMLを検索を開始。あなたは説明のプログラミングに使用できるHTMLからIDや他のいくつかの特定の特性を引っ張ることができる必要があります。
あなたは私たちがより多くの詳細を確認することで見ることができるサンプルHTMLとQTPコードをお持ちですか?おそらく、もっと簡単な方法があります。
私は最初の質問を言い換えるてみましょう。
の行数は不明ですが、あなたが行を見つけるためにユニークなキー値を持っている場合WebTable内に含まれるオブジェクトへの参照を取得する方法?
ボタン、チェックボックス、コンボボックス、テーブル内の他のオブジェクトに適用される。
実装ます。
1)行を検索
intRow = objWebTable.GetRowWithCellText(sKeyValueText、 "項目") あなたが名前または番号で列を指定することができます。
2)盗ん子オブジェクト
設定objButton = objWebTable.ChildItem(intRow、INTCOL、 "WebButton"、0) あなただけの数で列を指定することができます。あなたが同じセルに複数のボタンを持っている場合は、最後のパラメータが有効になります。
私のブログにいくつかの他の技術の例を確認してください( http://automationbeyond.wordpress.com/する)ます。