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_field
是Watir::Browser
class的实例方法。如果你想使用它,你必须在 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")
大家好,我正在用 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_field
是Watir::Browser
class的实例方法。如果你想使用它,你必须在 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")