Ruby 如何在pageobject中使用text\u field\u value\u set方法

Ruby 如何在pageobject中使用text\u field\u value\u set方法,ruby,selenium-webdriver,watir,watir-webdriver,page-object-gem,Ruby,Selenium Webdriver,Watir,Watir Webdriver,Page Object Gem,目前我正在使用.send_keys,它不会清除字段中的现有文本。我发现在PageObject中有一个可用的text\u field\u value\u set方法,它清除现有文本并在watir webdriver中输入link.set。但是当我像这样使用的时候,我得到了一个语法错误 方法: 错误: 获取文本\字段\值\设置以工作 发生错误的原因是参数发送到text\u field\u value\u set方法的方式 keyword=(value) 该方法需要两个参数-text\u field

目前我正在使用
.send_keys
,它不会清除字段中的现有文本。我发现在PageObject中有一个可用的
text\u field\u value\u set
方法,它清除现有文本并在watir webdriver中输入link
.set
。但是当我像这样使用的时候,我得到了一个语法错误

方法: 错误:
获取
文本\字段\值\设置
以工作

发生错误的原因是参数发送到
text\u field\u value\u set
方法的方式

keyword=(value)
该方法需要两个参数-
text\u field\u value\u set(标识符,值)
。请注意,您正在尝试向第一个参数(即标识符)发送哈希,并向第二个参数(值)发送字符串。Ruby不清楚散列的结束位置。有一篇关于使用哈希作为方法参数的优点和问题的好文章

归根结底,如果散列不是最后一个参数,则需要使用显式散列-例如在输入周围放置大括号。这看起来像:

text_field_value_set({name: 'keyword'}, "#{job}")
这将解决您看到的异常,但是您将得到另一个关于
text\u field\u value\u set
方法不存在的异常。它是平台类的方法,而您的页面不是。但是,您的页面可以使用
platform
方法访问平台

综上所述,该方法的工作原理如下:

def search(job)
  search_job
  wait_element.when_not_visible
  platform.text_field_value_set({name: 'keyword'}, "#{job}")
  add_element.click   
end
更好的解决方案

也就是说,我不认为使用
text\u field\u value\u set
是正确的方法。这实际上更像是文本字段访问器使用的内部方法。同样,它也破坏了使用页面对象访问器方法的目的

假设您有一个
关键字元素。send\u keys
,我假设您已经为文本字段定义了一个访问器:

text_field(:keyword, :name => 'keyword')
这将为您的页面对象创建一个方法,允许使用以下内容设置文本字段。此方法调用
text\u field\u value\u set
方法,该方法最终调用所需的Watir
set
方法

keyword=(value)
您的方法可以写成:

def search(job)
  search_job
  wait_element.when_not_visible
  self.keyword = job
  add_element.click   
end
请注意,因为类中正在使用
关键字=
方法,所以我们需要使用
self
,这样我们就可以清楚地看到,我们希望进行方法调用,而不是创建局部变量

def search(job)
  search_job
  wait_element.when_not_visible
  self.keyword = job
  add_element.click   
end