我是使用Ruby自動化測試的新手(與Selenium結合使用),並努力在我的test_steps.rb中使用常量的名稱而不是它的值。Ruby:如何使用常量名稱而不是它的值
我使用了3個文件如下:
LoginPage.rb
:
class LoginPage < Base
FIELDS = {
'Username' => '//form[@id="login"]//input[@name="j_username"]',
}
Base.rb
:
def fill_field(field, value)
find(:xpath, field, wait: 15).set(value)
#logger("Filling field with xpath '" + field + "' with value '" +
value + "'.") > this works fine but prints the xpath
p "field: " + field
log = field.scan(/\w+(?:'\w+)*/).last
logger("Filling field '" + log + "' with value '" + value + "'.")
test_steps.rb:
And(/^logs in as user "([^"]*)"$/) do |userName|
$login_name = search_excel('testdata/accounts.xlsx', userName, 1)
@pg.fill_field(LoginPage::FIELDS['Username'], $login_name)
當execu婷場景我看到這在我的命令提示符:
Given a user is on the oCRM login page # features/step_definitions/test_steps.rb:13
"field: //form[@id=\"login\"]//input[@name=\"j_username\"]"
28/12/2016 13:03:50 Filling field 'j_username' with value 'D0X02703'.
注意,在Base.rb
打印爲常量匹配「場」
'//form[@id="login"]//input[@name="j_username"]'
我想它打印的常量本身的價值線:"LoginPage::FIELDS['Username']"
。我們的目標是在我的日誌記錄,以打印:
"Filling field 'Username' with value 'DOX02703'."
我試着打印"field.name"
,"field.value"
與local_variables
玩耍了,但還沒有成功。幫助將非常歡迎!
也嘗試了其他方式下面的定義,但ofcourse那麼它不會拿起恆定值,並查找的XPath "LoginPage::FIELDS['Username']"
:
def fill_fields(page, type, field, value)
find(:xpath, page + "::" + type + "['" + field + "']", wait: 15).set(value)
我想,這可能會爲你做它,假設你排除值印刷的一部分! http://stackoverflow.com/q/2603617/6090706 –
感謝您的評論!我更喜歡不使用我不明白的代碼(或者看起來過於複雜),所以我不會這樣做。也許只需在日誌中打印xpath即可:-) – Blapmeister
最好不要使用你不明白的代碼,但如果你試圖理解它,你將會學到一些或未來的事情 –