watir 方法与我的 ruby class 冲突

watir method conflicts with my ruby class

大家好,我正在用 Watir 做一些自动化脚本,并试图创建一个 ruby class 来让它变得更好,但我遇到了这个错误:

examen.rb:6:in 'enterEmail': undefined method 'text_field' for # (NoMethodError)

这是我的冲突代码的一部分:

require 'watir-webdriver'
class LoginPage 
  def enterEmail (email)
    text_field(:user, :id => 'user_email').set email
  end
end

我看到的问题是:我没有在我的 class 中定义 'text_field()' 方法只是因为它是一个 Watir 方法...任何人都知道我如何在class是我创建的吗?

text_fieldWatir::Browserclass的实例方法。如果你想使用它,你必须在 class.

的实例上调用它
class LoginPage
  def initialize()
    @b = Watir::Browser.new
  end 

  def enterEmail (email)
    @b.text_field(:user, :id => 'user_email').set email
  end
end

确实,您的 class 没有任何 text_field 方法。此方法是在 Watir::Browser 实例上定义的。在你的例子中,还没有创建一个。

class LoginPage 
  def initialize
    @browser = Watir::Browser.new
    @browser.goto "http://example.com"
  end

  def enterEmail (email)
    @browser.text_field(:user, :id => 'user_email').set email
  end
end

Yossi 和 Martin 都答对了。但是因为您正在定义 LoginPage class,您可能应该查看 page-object gem。这使您可以定义一个 text_field 几乎与您已有的代码相同的代码。您的 class 看起来像:

class LoginPage
  include PageObject

  text_field(:user, :id => 'user_email')      

  def enter_email(email)
    self.user = email
  end
end

你会像这样执行它:

login = LoginPage.new(browser)
login.enter_email("my_email@example.com")