如何在pageobject中使用text_field_value_set方法

时间:2014-06-14 14:04:26

标签: ruby selenium-webdriver watir watir-webdriver page-object-gem

目前我使用的.send_keys并未清除字段中的现有文字。我发现PageObject中有一个text_field_value_set方法可以清除现有文本并在watir-webdriver中输入链接.set。但是我在使用这样的

时遇到语法错误

方法:

def search(job)
    search_job
    wait_element.when_not_visible
    #keyword_element.send_keys "#{job}"
    text_field_value_set(name: 'keyword', "#{job}") # using like this give an error
    add_element.click   
end

错误:

syntax error, unexpected ')', expecting => text_field_value_set(name: 'keyword', "#{job}")
                                                              ^ (SyntaxError)

1 个答案:

答案 0 :(得分:1)

text_field_value_set开始工作

由于参数被发送到text_field_value_set方法的方式而发生错误。

该方法需要两个参数 - text_field_value_set(identifier, value)。请注意,您正在尝试将哈希发送到第一个参数(即标识符),并将字符串发送到第二个参数(值)。 Ruby不清楚散列的结尾。 Skorks有一篇很好的文章,关于使用哈希作为方法参数的好处和问题。

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

text_field_value_set({name: 'keyword'}, "#{job}")

这将解决您看到的异常,但是您将获得有关text_field_value_set方法不存在的另一个例外。它是Platform类的一种方法,您的页面不是。但是,您的网页可以使用platform方法访问该平台。

将所有内容放在一起,该方法将起作用:

def search(job)
  search_job
  wait_element.when_not_visible
  platform.text_field_value_set({name: 'keyword'}, "#{job}")
  add_element.click   
end

更好的解决方案

那就是说,我不认为使用text_field_value_set是正确的方法。这实际上更像是文本字段访问器使​​用的内部方法。同样,它也失去了使用页面对象访问器方法的目的。

鉴于您有一个keyword_element.send_keys,我假设您已经为文本字段定义了一个访问者:

text_field(:keyword, :name => 'keyword')

这会为您的页面对象创建一个方法,允许使用以下内容设置文本字段。此方法调用text_field_value_set方法,该方法最终调用所需的Watir set方法。

keyword=(value)

您的方法可以写成:

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

请注意,因为在类中使用了keyword=方法,所以我们需要使用self,这样我们很清楚我们要进行方法调用而不是创建局部变量。