2013-01-11 98 views
0

試圖做一個動態測試套件並重新使用函數定義。我有一個表單,您可以選擇不同類型的聯繫方式,然後根據聯繫方式顯示不同的頁面。我試圖做ruby​​動態函數調用

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

這除非網址包括「contactBy =」和響應類型(意味着你已經在頁面上並沒有鏈接會將當前響應的類型,並點擊鏈接點擊)

我有一個頁面對象類(ContactUsPage),其具有不同的方法鏈接(電子郵件,電話,傳真,郵政)

我遇到的問題是與ContactUsPage.response響應越來越注入進入瀏覽器檢查,但它正在尋找ContactUsPage內的方法「響應」,而不是注入方法。

該方法應調用ContactUsPage.emailContactUsPage.faxContactUsPage.phone,具體取決於傳遞給函數的方法。

回答

1

您可以使用Ruby的send方法來調用動態的方法:

on_page(ContactUsPage).send(response) 

send的第一個參數是一個字符串或符號與要調用的方法名;任何更多的參數都傳遞給方法本身。

on_page(ContactUsPage).send("#{response}_element") 
# equivalent to `on_page(ContactUsPage).email_element` when response == "email" 
+0

可以:例如,如果你想調用變量名稱(email_element或類似的),你只需要做一個快速的字符串插值開始的方法foo.send(:bar, "baz")相當於foo.bar("baz")

您在使用_element屬性時使用此方法? on_page(ContactUsPage).send(response)_element.exists?.should be_true在(響應)「預計行結束」之後給我一個錯誤 –

+0

是的,那是無效的Ruby語法。 'send'需要你期望它調用的方法的全名。請參閱我編輯的答案,瞭解正確的方法。 –

+0

我不認爲你理解_element部分。 _element是一個由頁面對象給你的函數。例如:鏈接(:電子郵件,x)。如果你使用電子郵件,你會得到x的值,email_element返回頁面中的元素 –