Watir — ведение журнала вне метода

Я все еще новичок в использовании Watir для автоматизированного тестирования, и я столкнулся с еще одной, возможно, безумно простой проблемой, с которой мне нужно обратиться к сообществу, чтобы получить небольшой толчок в правильном направлении.

Я пытаюсь использовать регистратор в Watir, который я могу заставить работать нормально, если я буду держать все в пределах методов. Если у меня нет определенного метода, например, при использовании цикла, я не могу заставить регистратор работать.

Вот пример кода, с которым я играю:

    $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

Спасибо!


person Community    schedule 02.07.2010    source источник
comment
Где вы на самом деле вызываете метод setup()? Я не вижу этого в опубликованном коде.   -  person Jonathan    schedule 03.03.2011


Ответы (1)


Похоже, у вас проблема с областью видимости. Когда вы определяете переменную внутри метода или цикла, это локальная переменная, существующая только внутри этого метода или цикла. Как только метод или цикл завершаются, переменная исчезает. Вам нужно будет объявить $logger вне метода установки, чтобы он был доступен вне этого метода.

person Community    schedule 07.07.2010
comment
Да, я тоже пробовал это, но я продолжаю получать сообщение об ошибке, которое заставляет меня думать, что я должен поместить это в метод, чтобы он работал: BoxDemo.rb:29:in <class:TC_SearchSKUs>': undefined method set_logger' for n il:NilClass (NoMethodError) из BoxDemo. rb:8:in `‹main›' Имейте в виду, что если я определяю это в переменной и использую в других методах, это работает. Это единственная ситуация, когда у меня не сработало. - person r3nrut; 07.07.2010