2016-05-02 10 views
0

UFTを使用して自動化するための非常に動的なアプリケーションがあります。アプリケーション画面のラベルは、ユーザーが入力した内容に基づいて変更されます。私は、アプリケーションに存在する可能性のあるすべてのフィールドのフィールド値を設定したところで優れています。課題は、UFTスクリプトがフィールド名を画面上で見つけたフィールド値だけを選択するようにすることです。スクリプトを実行するたびに、画面に表示されるフィールドの選択に基づいて、Excelシートから対応する値だけを取り出し、そのExcelシート内の他の値は無視します。UFTスクリプトがアプリケーション画面上のラベルに基づいてExcelのセルをスキップするようにするには

例:

Excelは、次のバレス

名前があります:ナンシー グレード:8 趣味:のみ、次の画面にカレン

しかし、アプリケーション内:ベロニカ BFF: 友達の書き込みをラベルが表示されます

名前: 趣味: BFF:

UFTスクリプトがフィールドラベルをExcelと比較し、Excelの値(この場合は名前、趣味、BFF)を選択し、他のフィールド(GradeとFriend)は無視します。

これは可能ですか?

+0

QTPネイティブDataTableとしてExcelファイルを使用していますか?何らかのテーブルに動的ラベルのあるフィールドか、キャプション付きのさまざまな入力ボックスですか? –

+0

はい、可能です。いくつかのサンプルコードを追加し、あなたの質問をもう少し具体的に、あるいはより良くするために、SSCCE http://www.sscce.org/を追加すると、よりターゲットを絞ったフィードバックを得ることができます。 ) – TheBlastOne

+0

そうです。 ExcelファイルをdataTableとして使用していますか?すべてのフィールドは、一意に識別できるラベル付きの入力ボックスです。これまでフィールド名を列にリンクしていて、その値を埋めるためにExcelに優れていました。しかし、私のコードが行っていないのは、フィールドラベルが画面に表示されない列を無視することです。 Visible = TrueとVisible = Falseなどを使用しましたが、それでもフィールドを探してスクリプトを失敗させようとしています。どこか間違ったことをやっていると思います。 – TryingtoAutomate

答えて

0

を使用していない理由ですが、入力用フォーム上のさまざまなエディットボックスを提示し、あなたのExcelファイルを保存するためにDataTableオブジェクトを使用しているアプリケーションを想定してみましょう。

これは私のやりたいことです。

まず...オブジェクトをオブジェクトリポジトリに集めます。私は、それぞれの可能なエディットボックスを独立したオブジェクト(アプリケーション自体のオブジェクト内)として作成/記録し、各オブジェクトが一意に識別可能であることを確認します...(エディットボックスのコントロール自体がQTPは、それらの隣にあるキャプションにリンクする機能を提供します)。また、アプリケーションが単に編集ボックスを隠している場合は、Visible = Trueがidenfity属性の1つであることを確認して、Visible = Falseの場合は見つからないようにします。

すべてのオブジェクトがORに入ったら、それらが存在するかどうかをチェックするのは簡単なことです。もちろん

'assuming your excel file is already imported as the global DataTable 
if Window("My App").Editbox("Name").exist(0) then Window("My App").Editbox("Name").Set DataTable("Name") 
if Window("My App").Editbox("Grade").exist(0) then Window("My App").Editbox("Grade").Set DataTable("Grade") 
if Window("My App").Editbox("Hobby").exist(0) then Window("My App").Editbox("Hobby").Set DataTable("Hobby") 
if Window("My App").Editbox("Writing Friend").exist(0) then Window("My App").Editbox("Writing Friend").Set DataTable("Writing Friend") 
if Window("My App").Editbox("BFF").exist(0) then Window("My App").Editbox("BFF").Set DataTable("BFF") 

、この例では非効率的であり、容易にロールアップすることができます(つまり、あなたがUDFを作成し、配列からフィールド名を読み込むループからそれを呼び出すことができます...)しかし、それはこのことを実証しなければなりません簡単なアプローチ。

0

だけ

If Obj1.Exist(5) Then 
    Obj1.Set ValueFromExcel1 
End if 

If Obj2.Exist(5) Then 
    Obj2.Set ValueFromExcel2 
End if 
+0

それはOPが求めているものではないので、私は推測します。 – TheBlastOne

0

私は@theblastoneに同意します。あなたの状況をより良く理解するためのコードを提供する必要があります。とにかく私はあなたの質問に答えようとします。以下は例であり、コードを構築することができます。アプリケーションでラベルがどのように表示されているのかわからないので、各ラベルを個別に識別できると仮定します。

j = Datatable.localsheet.GetRowCount 

For i = 1 to j 
Datatable.LocalSheet.SetCurrentRow i 

vout = trim(Datatable("Excel column name",dtlocalsheet)) 
'Not sure about the following line 
vin = browser().page().Webtable().getcelldata(r,c) 
If not trim(Ucase(vout))= trim(Ucase(vin)) Then 
Datatable("Result",dtlocalsheet) = "Invalid Record" 
Do Until trim(Ucase(vout))= trim(Ucase(vin)) 
i=i+1 
If i > j Then 
ExitAction 
End IF 
Datatable.LocalSheet.SetCurrentRow I 
Datatable("Result",dtlocalsheet) = "Invalid Record" 
vout = trim(Datatable("Excel column name",dtlocalsheet)) 
Loop 
End If 
+0

あなたは、アプリケーションに基づいて正しいラベル名を取得するもう1つのFORループをこのループの先頭に置くことができます。多かれ少なかれ、同じままでなければなりません! – Harman

関連する問題