Watir-Webdriver の Browser オブジェクトのラッパーを作成しようとしています。主に、ユーザーが呼び出したとき
browser = Watir::Browser.new
browser.link(:text => 'continue').click
ブラウザーの後にユーザーが入力した内容を検査してログに記録し、Watir-Webdriver のブラウザーを呼び出してアクションを実行したいと考えています。
どうすればこれを達成できますか?
アップデート
UI テストの機能を公開する基本クラスがあります。ユーザーの Browser をインスタンス化し、$browser として公開します。派生クラスが $browser オブジェクトで何かを行う場合、begin/rescue をラップして、ユーザーが何をしているかをログに記録したいと考えています。したがって、Watir の Browser オブジェクトを公開する代わりに、Watir の Browser オブジェクトを呼び出す前にログを記録する独自のオブジェクトを公開したいと考えています。
現在、ブロックを受け取る基本クラスにメソッドを含めることでこれを実現しています。
def perform(action, delay = 1)
begin
yield action if block_given?
sleep delay
assert(true)
rescue Watir::Exception::UnknownObjectException,
Watir::Exception::ObjectDisabledException,
Watir::Exception::ObjectReadOnlyException,
Watir::Exception::NoValueFoundException,
Watir::Exception::MissingWayOfFindingObjectException,
Watir::Exception::UnknownCellException,
Watir::Exception::NoMatchingWindowFoundException,
Watir::Exception::NoStatusBarException,
Watir::Exception::NavigationException,
Watir::Exception::UnknownFrameException,
Watir::Exception::UnknownRowException,
Selenium::WebDriver::Error::ElementNotVisibleError => e
$log.error(e.message)
assert(false)
end
end
ただし、この perform メソッドを削除して、呼び出し元が perform に関する知識を必要としないようにしたいと考えています。また、呼び出し元が $browser オブジェクトで何をしているかを調べて、それをログに記録したいと考えています。ブロックを文字列に変換できないため、ここではできません。:-/