1

QTP11では、ドロップダウンリストボタンを処理するために以下のような関数を持っています。HTML 構造は次のとおりです。

ここに画像の説明を入力 Sub FindDropdown(text) ' ページとテキストをパラメータとして取得 counter = 0

Set oDesc = Description.Create()
oDesc("html tag").Value = "tr"
Set trContent = Browser("Change Management - SAP").Page("Change Management - SAP").ChildObjects(oDesc)
TRSum = trContent.Count()

For i = 0 To TRSum - 1
    Set objPage = trContent(i).Object
    Set objTag = objPage.GetElementsByTagName("td") 
    spanSum = objTag.Length - 1

    For intCtr = 0 to spanSum
            strLink = objTag(intCtr).InnerText
            If strLink = text Then
                 trContent(i).Object.click()
            End If 
     Next   
Next
Set  oDesc=nothing

End Sub

私がテストしたところ、内部要素 Select All が認識されましたが、アクション (クリックなど) を実行できませんでした。実際、コード: trContent(i).Object.click() は効果がないようです。

これは、リスナー/イベント ハンドラーの場所と関係がありますか? リスナーなどは TR または TD 要素ではありませんか?

4

2 に答える 2

1

クリック イベント リスナーをトリガーするために、合計 4 つの方法を試しました。応答なし; 2. SendKeys メソッドの使用: このアクションでは機能しますが、メイン アクションからアクションを呼び出したときは機能しません。3. DOM 呼び出しの使用: 上記の質問のスクリプトと同様に、クリック ハンドラーを起動できませんでした。

最後に、デバイスリプレイに目を向けました。このアイデアは、要素の実行時の位置を取得し、その位置をクリックします。これはどういうわけか低レベルの機能であり、私の側ではスムーズに動作します。これが私の作業スクリプトです:

Set objReleaseTR = Browser("Change Management - SAP").Page("Change Management - SAP_3").WebElement("Release all Transport")

Set objDeviceReplay = CreateObject("mercury.devicereplay")

x = objReleaseTR.GetROProperty("abs_x")
y = objReleaseTR.GetROProperty("abs_y")

objDeviceReplay.MouseClick x + 5, y + 5, 0

Set objDeviceReplay = nothing

これが同じ問題に遭遇した人に役立つことを願っています.

于 2013-12-17T05:46:26.350 に答える
1

まず、クリック リスナーがアタッチされているかどうかを検証します。それが必要とされています。

以下のコード trContent(i).Object.FireEvent("onclick") を試すことができます

于 2013-12-16T08:12:48.227 に答える