我想动态使用页面对象。像这样:
text_field(:company_name_field, id: 'company_directory_name')
select_list(:state_select, id: 'company_directory_workflow_state')
def input_text_field (page_object)
sample_text = Faker::Lorem.paragraph
$text_array.push(sample_text)
wait_until{send("#{page_object}_field?")}
send("#{page_object}_field=", sample_text)
end
但是,使用select_index对象而不是input_field:
def input_select_list(page_object)
wait_until{send("#{page_object}_select?")}
x = rand(0..send("#{page_object}_select_element.options.length"))
send("#{page_object}_select_element.option(#{:index}, #{x})).select")
end
但是这给了我一个错误“未定义的方法`state_select_element.option(index,1).select'”
如何做到这一点?
答案 0 :(得分:1)
使用send
时,第一个参数需要是单个方法。 send
不会将state_select_element.option(index, 1).select
分解为3个方法调用。
由于只需要从字符串中评估第一个方法调用state_select_element
,因此只需使用send
即可。其余的可以称为正常。将此应用于您的方法会给出:
def input_select_list(page_object)
wait_until{send("#{page_object}?")}
x = rand(0..send("#{page_object}_element").options.length) - 1
send("#{page_object}_element").option(:index, x).select
end
但是,option
和select
方法会给出折旧警告。为了防止错误,我可能会重新编写方法:
def input_select_list(page_object)
select = send("#{page_object}_element")
select.when_present
select.select(send("#{page_object}_options").sample)
end