问题
我假设您使用的是 watir-classic v3.7.0 或更早版本。
在这些版本中,doingrequire 'watir-classic'
不会立即加载所有类。一些类,包括 Watir::Element,在创建浏览器实例之前不会加载。
这意味着:
# Does not create Watir::Element#generate_ruby_code yet
require 'watir-classic'
# You create a Watir::Element#generate_ruby_code method
module Watir
class Element
def generate_ruby_code(element, method_name, *args)
puts "Print this"
end
end
end
# Watir loads the Watir::Element#generate_ruby_code, which overrides yours
browser = Watir::Browser.new
我的理解是,这是由于 tp watir-classic 以前支持多种浏览器 - 即 FireWatir 和 SafariWatir。根据所使用的浏览器自动加载各种类。
解决方案 1 - 升级到 v4.0 或更高版本
最简单的解决方案是将您的 watir-classic 升级到 v4.0 或更高版本(当前最新版本为 4.0.1)。
此版本中删除了自动加载,这意味着您的代码现在可以按原样工作。
解决方案 2 - 首先初始化浏览器
如果升级不是一个选项,您需要在猴子修补之前手动强制自动加载。您可以通过简单地引用常量来做到这一点:
Watir::IE
只需在需要 watir-classic 之后和猴子修补之前的某个时间点包含此内容。
require 'watir-classic'
Watir::IE # this will load the code
module Watir
class Element
def generate_ruby_code(element, method_name, *args)
puts "Print this"
end
end
end
browser = Watir::Browser.new
browser.goto 'www.google.ca'
browser.link.click_no_wait
#=> "Print this"