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.emailまたはを呼び出す必要がContactUsPage.faxあります。ContactUsPage.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 に答える