1

私は自動化テストに Watir を使用することにまだかなり慣れていませんが、別の非常に簡単な問題に遭遇したので、コミュニティに連絡して正しい方向への小さなバンプを求める必要があります。

Watir で logger を使用しようとしていますが、すべてをメソッド内に保持すると正常に動作します。たとえば、ループを使用する場合など、メソッドが定義されていないと、ロガーを機能させることができません。

これが私が遊んでいるコードの例です:

    $LOAD_PATH << File.dirname(__FILE__)
require 'xls'
require 'watir'

xlFile = XLS.new(Dir.pwd + '/test_XLS_data.xls') #grab the data file in the same dirrectory
myData = xlFile.getRowRecords('Google Search Data','Example')  #pull data records  from excel
xlFile.close


myData.each do |record|
  ie = Watir::IE.start('google.com')
  ie.text_field(:name,'q').set(record['SearchString'])
  ie.button(:value,/Search/i).click
  if ie.contains_text(record['ContainsText'])
    puts "Results of search: '#{record['SearchString']}' contains '#{record['ContainsText']}'"
  else
    puts "Error: could not find text: '#{record['ContainsText']}' in results of search: '#{record['SearchString']}'"
  end
  sleep 3
  ie.close
end

現在失敗している私が行った変更は次のとおりです。

$LOAD_PATH << File.dirname(__FILE__)

require 'xls'
require 'watir'
require 'example_logger1.rb'

def setup
    filePrefix = "xls_log"
    #create a logger 
    $logger = LoggerFactory.start_xml_logger(filePrefix) 
    $ie.set_logger($logger)
 end


 xlFile = XLS.new(Dir.pwd + '/test_XLS_data.xls') #grab the data file in the same dirrectory
 $logger.log("")
 $logger.log("getting data from Excel")
 myData = xlFile.getRowRecords('Google Search Data','Example')  #pull data records  from excel
 xlFile.close


myData.each do |record|
  ie = Watir::IE.start('google.com')
  ie.text_field(:name,'q').set(record['SearchString'])
  ie.button(:value,/Search/i).click
  if ie.contains_text(record['ContainsText'])
    puts "Results of search: '#{record['SearchString']}' contains '#{record['ContainsText']}'"
  else
    puts "Error: could not find text: '#{record['ContainsText']}' in results of search: '#{record['SearchString']}'"
  end
  sleep 3
  ie.close
end

ありがとう!

4

1 に答える 1

0

スコープに問題があるようです。メソッドまたはループ内で変数を定義すると、それはそのメソッドまたはループ内にのみ存在するローカル変数になります。メソッドまたはループが終了すると、変数はなくなります。setup メソッドの外で $logger を使用できるようにするには、setup メソッドの外で $logger を宣言する必要があります。

于 2010-07-07T00:36:56.607 に答える