担心 - ruby 代码 "undefined method present? pr exist"
watir - ruby code "undefined method present? pr exist"
require 'rubygems'
require "watir"
browser = Watir::Browser.new :chrome,:switches => %w[--disable-notifications]
i=0;
begin
#TODO logining to the facebook
browser.goto 'linkedin.com'
browser.text_field(:id => 'login-email').set 'ananthragavendra@gmail.com'
browser.text_field(:id => 'login-password').set 'ru09ec32'
browser.button(type: 'submit').click
puts '**** linkedin logged in ****'
sea = browser.div(:class => 'nav-search-bar')
puts sea
if sea.exits?
browser.div(:class => 'nav-search-bar').click
browser.div(:class => 'type-ahead-input-container').text_field.set 'wipro'
browser.button(:class => 'nav-search-button').click
puts '**** searched, the results for wipro is shown '
else
puts 'div not present'
end
side = browser.div(:class => 'right-rail search-right-rail')
puts side
if side.present?
puts 'div present'
side1 = browser.divs(:class => 'right-rail search-right-rail')
else
puts 'div not present'
end
#TODO exception handling
rescue Exception => e
p "Error Found..... #{e.message}"
end
简单的执行上面的时候报错,我可以实时找到div但是我无法使用if命令检查div,我也试过一些代码如 exists.
present?
由 Rails 添加到 Object
。所以如果你在 Rails 之外,你可能意味着:!side.nil?
首先,if sea.exits?
这一行是错误的,改成if sea.exists?
您的代码是完美的,但需要非常微小的更改才能实现 WATIR 的预定义等待语句。
你使用了这个语句
side = browser.div(:class => 'right-rail search-right-rail')
如果你这样写,那么 WATIR 的预定义等待将不起作用,因为你要调用 Watir::Div
对象的方法是进行四次检查的地方,
例如,如果您调用
browser.div(:class => 'right-rail search-right-rail').click
然后会发生以下四项检查
1)exist?
2)enabled?
3)present?
4)writable?
但是如果你没有像我展示的那样调用任何函数,那么它不会 return 元素,因为语句甚至在元素加载之前就已经执行了,因此 side.present?是错误的,它给你的结果是 div not present
所以按以下方式更改您的代码
browser.div(:class => 'right-rail search-right-rail').click
side = browser.div(:class => 'right-rail search-right-rail')
puts side
if side.present?
puts 'div present'
side1 = browser.divs(:class => 'right-rail search-right-rail')
else
puts 'div not present'
end
现在您的代码将完美运行。目前的方法 return 适合你。
require 'rubygems'
require "watir"
browser = Watir::Browser.new :chrome,:switches => %w[--disable-notifications]
i=0;
begin
#TODO logining to the facebook
browser.goto 'linkedin.com'
browser.text_field(:id => 'login-email').set 'ananthragavendra@gmail.com'
browser.text_field(:id => 'login-password').set 'ru09ec32'
browser.button(type: 'submit').click
puts '**** linkedin logged in ****'
sea = browser.div(:class => 'nav-search-bar')
puts sea
if sea.exits?
browser.div(:class => 'nav-search-bar').click
browser.div(:class => 'type-ahead-input-container').text_field.set 'wipro'
browser.button(:class => 'nav-search-button').click
puts '**** searched, the results for wipro is shown '
else
puts 'div not present'
end
side = browser.div(:class => 'right-rail search-right-rail')
puts side
if side.present?
puts 'div present'
side1 = browser.divs(:class => 'right-rail search-right-rail')
else
puts 'div not present'
end
#TODO exception handling
rescue Exception => e
p "Error Found..... #{e.message}"
end
简单的执行上面的时候报错,我可以实时找到div但是我无法使用if命令检查div,我也试过一些代码如 exists.
present?
由 Rails 添加到 Object
。所以如果你在 Rails 之外,你可能意味着:!side.nil?
首先,if sea.exits?
这一行是错误的,改成if sea.exists?
您的代码是完美的,但需要非常微小的更改才能实现 WATIR 的预定义等待语句。
你使用了这个语句
side = browser.div(:class => 'right-rail search-right-rail')
如果你这样写,那么 WATIR 的预定义等待将不起作用,因为你要调用 Watir::Div
对象的方法是进行四次检查的地方,
例如,如果您调用
browser.div(:class => 'right-rail search-right-rail').click
然后会发生以下四项检查
1)exist?
2)enabled?
3)present?
4)writable?
但是如果你没有像我展示的那样调用任何函数,那么它不会 return 元素,因为语句甚至在元素加载之前就已经执行了,因此 side.present?是错误的,它给你的结果是 div not present
所以按以下方式更改您的代码
browser.div(:class => 'right-rail search-right-rail').click
side = browser.div(:class => 'right-rail search-right-rail')
puts side
if side.present?
puts 'div present'
side1 = browser.divs(:class => 'right-rail search-right-rail')
else
puts 'div not present'
end
现在您的代码将完美运行。目前的方法 return 适合你。