案例:
require 'watir'后,第一次执行 ie=Watir::IE.new报错如下:
C:\>irb
irb(main):001:0> require 'watir'
=> true
irb(main):002:0> ie=Watir::IE.new
FFI::NotFoundError: Function '_get_errno' not found in [msvcrt.dll]
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/ffi-1.1.5-x86-mingw32/lib/ffi/library.rb:249:in `attach_function'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process/functions.rb:12:in `attach_pfunc'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process/functions.rb:64:in `<module:Functions>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process/functions.rb:8:in `<top (required)>'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process.rb:1:in `<top (required)>'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie-process.rb:1:in `<top (required)>'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie.rb:45:in `<top (required)>'
from (irb):2
from C:/Ruby192/bin/irb:12:in `<main>'
继续第二次执行 ie=Watir::IE.new,却可以。如下:
C:\>irb
irb(main):001:0> require 'watir'
=> true
irb(main):002:0> ie=Watir::IE.new
FFI::NotFoundError: Function '_get_errno' not found in [msvcrt.dll]
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/ffi-1.1.5-x86-mingw32/lib/ffi/library.rb:249:in `attach_function'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process/functions.rb:12:in `attach_pfunc'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process/functions.rb:64:in `<module:Functions>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process/functions.rb:8:in `<top (required)>'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-process-0.7.0/lib/win32/process.rb:1:in `<top (required)>'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie-process.rb:1:in `<top (required)>'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie.rb:45:in `<top (required)>'
from (irb):2
from C:/Ruby192/bin/irb:12:in `<main>'
irb(main):003:0> ie=Watir::IE.new
=> #<Watir::IE:0x15d5138>
irb(main):004:0> exit
解决办法:
把win32-process版本降级,如下:
C:\>gem uninstall win32-process
You have requested to uninstall the gem:
win32-process-0.7.0
watir-1.6.5 depends on [win32-process (>= 0.5.5)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn] y
Successfully uninstalled win32-process-0.7.0
C:\>gem install win32-process -v 0.6.6
Fetching: win32-process-0.6.6.gem (100%)
Successfully installed win32-process-0.6.6
1 gem installed
Installing ri documentation for win32-process-0.6.6...
Installing RDoc documentation for win32-process-0.6.6...
C:\>gem list
*** LOCAL GEMS ***
activesupport (3.2.8)
builder (3.1.4)
commonwatir (1.6.5)
ffi (1.1.5 x86-mingw32)
firewatir (1.6.5)
hoe (3.1.0)
i18n (0.6.1)
minitest (1.6.0)
multi_json (1.3.6)
nokogiri (1.5.5 x86-mingw32)
rake (0.8.7)
rdoc (2.5.8)
s4t-utils (1.0.4)
user-choices (1.1.6.1)
watir (1.6.5)
win32-api (1.4.8 x86-mingw32)
win32-process (0.6.6)
windows-api (0.4.2)
windows-pr (1.2.2)
xml-simple (1.1.2)
C:\>irb
irb(main):001:0> require 'watir'
=> true
irb(main):002:0> ie=Watir::IE.new
=> #<Watir::IE:0x30ad9fc4 url="about:blank" title="">
irb(main):003:0>
ok,问题解决。