我正在尝试围绕 Watir-Webdriver 的 Browser 对象编写一个包装器。主要是当用户调用
browser = Watir::Browser.new
browser.link(:text => 'continue').click
我想检查用户在浏览器后输入的内容并记录下来,然后调用 Watir-Webdriver 的浏览器并执行操作。
我怎样才能做到这一点?
更新
我有一个公开 UI 测试功能的基类。它为用户实例化浏览器并将其公开为 $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 对象上所做的事情并记录下来。我不能在这里执行此操作,因为我无法将块转换为字符串。:-/