問題
watir-classic v3.7.0 以前を使用していると仮定します。
これらのバージョンでは、実行require '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
私の理解では、これは watir-classic が以前に複数のブラウザー (つまり、FireWatir と SafariWatir) をサポートしていたためです。使用されているブラウザに基づいて、さまざまなクラスが自動ロードされました。
解決策 1 - v4.0 以降にアップグレードする
最も簡単な解決策は、watir-classic を v4.0 以降 (現在の最新バージョンは 4.0.1) にアップグレードすることです。
このバージョンではオートローディングが削除されました。つまり、コードはそのまま動作します。
解決策 2 - 最初にブラウザを初期化する
アップグレードができない場合は、モンキー パッチを適用する前に手動で自動ロードを強制する必要があります。これは、定数を次のように参照するだけで実行できます。
Watir::IE
これは、watir-classic を要求した後、monkey パッチを適用する前に、単純に含めてください。
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"