目前我使用的.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)
答案 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
,这样我们很清楚我们要进行方法调用而不是创建局部变量。