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
方法,该方法最终调用所需的Watirset
方法
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