担心 - 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 适合你。