キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

第二回QTP勉強会の宿題

ゆもつよ
頻繁なアドバイザー

第二回QTP勉強会の宿題

第一回勉強会の宿題の回答例を以下の観点で直してください。

 


  ・ラジオボタンの選択は、Value値を使わなくても#1、#2といった値で目的のものを選択するように変​更

   (プロパティ値のselected item indexも使えるかもしれない)


  ・検索結果の数(ループさせる数)は、割り算するよりitems countというラジオボタンのプロパティを取得して使羽陽に変更してみる


  ・Bitmapの名称は一意になるようにタイムスタンプを使ったものにする
  

※ ベースにするスクリプトは新しく記述しても、今回の回答例を使ってもらってかまいません。今回の回答例を使​う際は、オブジェクトリポジトリは取り直しなので、「ナビゲートして学習」機能で、共有リポジトリを作って​みましょう。

 

宿題をやってきてくれた方は、当日に「スクリプト」と「共有オブジェクトリポジトリ」を持参してくださ​い。勉強会の中で再生してみます、もしくはそれを見ながら出席者間で情報交換の資料として使わせていただき​ます。QTP使いのメンバーもいますので有益なフィードバックが得られるかもしれないですよ!
1 件の返信
ゆもつよ
頻繁なアドバイザー

Re: 第二回QTP勉強会の宿題

宿題の回答例です。今回も宿題をやってきたのが1名だったのでひとつだけです(笑)

' スクリプトです。
' By よしむら
Option Explicit
Dim resultsFolderPath 
Dim fso
Dim folderName 
Dim airLine
Dim airLineCount
Dim flight
Dim flightCount
Dim saveBmpFile

 resultsFolderPath = "C:\result"

' 結果の親フォルダがない場合には、作成をする
Set fso = CreateObject("Scripting.FileSystemObject")
If  not fso.FolderExists(resultsFolderPath) Then
	fso.CreateFolder(resultsFolderPath)
End If

' 実行パス用のフォルダを作成する
resultsFolderPath = resultsFolderPath & "\" & GetCurrentTimeStringLongFormat()
fso.CreateFolder(resultsFolderPath)

Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("userName").Set "mercury"
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("password").SetSecure "4fbc1cf7c6b55a0af32aa5f7b00b8184b100833c"
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Image("Sign-In").Click 11,2
airLineCount = Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("airline").GetTOProperty("items count")

' 航空会社の一個目は、指定なしなので、indexの1からチェックを始める
For airLine = 1 to airLineCount -1
	Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebRadioGroup("tripType").Select "oneway"
	Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("airline").Select "#" & CStr(airLine)
	Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").Image("findFlights").Click

	flightCount = Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").WebRadioGroup("outFlight").GetTOProperty("items count")
	' サイトでは、なぜか片道で航空会社を選択しても、すべての航空会社のデータが表示される

	For flight = 0 to flightCount  -1
		Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").WebRadioGroup("outFlight").Select "#" & CStr(flight)
		Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Image("reserveFlights").Click

		wait(1)
		Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Sync

		saveBmpFile = resultsFolderPath & "\" & "Airline_" & CStr(airLine) & "-Flight_" & CStr(flight) + ".bmp"
		Browser("Welcome: Mercury Tours").CaptureBitmap saveBmpFile, True	' ビットマップをキャプチャしてCドライブに保存
		Reporter.ReportEvent micDone, "表示結果保存", "ファイル名: " & saveBmpFile, saveBmpFile	' 保存したビットマップをテスト結果で表示できるようにしてる

		' フライト選択画面へうまく戻れなかったので、再度フライト検索画面を表示
		Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Link("Flights").Click
		Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebRadioGroup("tripType").Select "oneway"
		Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("airline").Select "#" + CStr(airLine)
		Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").Image("findFlights").Click
	Next
	Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Link("Flights").Click
Next
Browser("Welcome: Mercury Tours").CloseAllTabs

Function GetCurrentTimeStringLongFormat
	Dim result
	Dim current
	current = now
	result  = Right("0000" & Year(current), 4)
	result = result & Right("00" & Month(current), 2)
	result = result &Right("00" & Day(current), 2) & "-"
	result =result  &Right("00" & Hour(current), 2)
	result = result  & Right("00" & Second(current),2)
	GetCurrentTimeStringLongFormat = result
End Function

   <宿題回答例の補足>

  ・ブラウザの起動は[記録と実行環境設定]ダイアログ・ボックスにて設定している (QTPのサンプルWebサイト) 

  ・サンプルWebサイトは、JavaバージョンとHTMLバージョンがあるが、このスクリプトはHTMLバージョン 
  ・C:\resultというフォルダの存在を確認していてなければ作成
  ・実行結果はresultフォルダの下に、[GetCurrentTimeStringLongFormat]で作った現在時刻のフォルダを作成し、そこに結果となる画面キャプチャを格納
   →結果格納フォルダがタイムスタンプなので、テストしたときに必ず別フォルダになる
  ・飛行機会社のリストの件数を[items count]というプロパティ値で取得してairLineCountという変数に格納し、その数の分ループをする
  ・ラジオボタンの生成件数を[items count]というプロパティ値で取得してflightCountという変数に格納し、その数の分ループをする
  ・リストやラジオボタンオブジェクトの選択肢は「#1、#2」といった番号で取得できるのでそれを利用
    ・CStrは変数の型を文字列形式に変更するために利用
    ・Bitmapの名称は一意になるようにループの番号で命名。(saveBmpFile = resultsFolderPath & "\" & "Airline_" & CStr(airLine) & "-Flight_" & CStr(flight) + ".bmp")
  ・[GetCurrentTimeStringLongFormat]という関数を作って、それを使いタイムスタンプの取得をしている

 

  ・「Option Explicit」を冒頭に持ってくることで、必ず変数の宣言をしないと使えなくなる
   それにより、変数のスペルミスといった問題で動かないことがなくなる。