0

尝试做一个动态测试套件并重用函数定义。我有一个表格,您可以在其中选择某人可以联系您的不同类型的方式,并且页面将根据联系方式显示不同。我正在尝试做

When /^I click the (.*) return type$/ do |response|
  on_page(ContactUsPage).response unless @browser.url.include?("contactBy=#{response}")

这将采用当前类型的响应并单击链接,除非 url 包含“contactBy=”和响应类型(意味着您已经在页面上并且没有可单击的链接)

我有一个页面对象类(ContactUsPage),其中包含不同方法(电子邮件、电话、传真、邮政)的链接

我遇到的问题是ContactUsPage.response 响应被注入到浏览器检查中,但它在 ContactUsPage 中寻找方法“响应”而不是注入该方法。

该方法应该调用ContactUsPage.emailContactUsPage.faxContactUsPage.phone取决于传递给函数的方法。

4

1 回答 1

1

您可以使用 Ruby 的send方法来动态调用方法:

on_page(ContactUsPage).send(response)

send的第一个参数是带有要调用的方法名称的字符串或符号;任何进一步的参数都会传递给方法本身。例如,foo.send(:bar, "baz")相当于foo.bar("baz")

如果你想调用一个以变量名(或类似名称)开头email_element的方法,你只需要做一个快速的字符串插值:

on_page(ContactUsPage).send("#{response}_element")
# equivalent to `on_page(ContactUsPage).email_element` when response == "email"
于 2013-01-11T16:01:27.517 回答