calabash-android 第二步的未定义方法
calabash-android undefined method for second step
我是 calabash 的新手,我正在尝试 运行 测试,calabash 识别出我的第一步并通过了,但是对于第二步我遇到了未定义的方法错误,
我的特征文件是:
Feature: Sign-in page
Scenario: Go to dashboard with skip login
Given I am on the Login Screen
When I touch the “Skip Login” button
Then I should see the Main Screen
我的 rb 文件是
Given(/^I am on the Login Screen$/) do
element_exists("button marked:'authenticate'")
end
When(/^I touch the "Skip Login" button$/) do
tap_mark 'skip_login'
end
Then(/^I should see the Main Screen$/) do
wait_for_elements_exist("label text: 'HeaderText'")
end
当它到达 "When" 步骤时,应用程序在我的 phone 上关闭。
有人可以帮我解决这个问题吗?
输出为:
Given I am on the Login Screen # features/step_definitions/calabash
_steps.rb:1
当我触摸 "Skip Login" 按钮时 # features\my_first.feature:4
然后我应该看到主屏幕 # features/step_definitions/calabash
_steps.rb:9
1 个场景(1 个未定义)
3 个步骤(1 个跳过,1 个未定义,1 个通过)
0m22.691s
您可以使用这些代码段为未定义的步骤实施步骤定义:
当(/^我触摸"Skip Login"按钮$/)时
pending # 用你希望的代码表达上面的正则表达式
结束
更详细一点,如果我走第二步而不是第一步,它会按button.I无法理解为什么会这样,为什么不做第二步
首先,请参阅 logcat 了解应用程序崩溃的详细信息。
我认为你是 运行 一个非常老的 Calabash 版本-Android。在较新的版本中,无效查询永远不会使应用程序崩溃。 wait_for_elements_exist("label text: 'HeaderText'")
会使应用程序在旧版本的 Calabash-Android 中崩溃,因为您在 text:
之后有一个 space,这是无效的。
较新版本的 Calabash-Android 会引发 Ruby 错误,告诉您查询格式错误。
你的测试输出会很好。但除此之外,您还输入了
tap_mark 'skip_login'
因此它将尝试查找具有该确切文本的文本。但是根据您的功能文件,我猜测您在按钮上实际拥有的是
Skip Login
因此 tap_mark 命令失败。
这只是一个猜测,但是 "skip_login" 是按钮的 ID 吗?如果您想使用它来决定点击什么,请执行类似
的操作
touch "button id:'skip_login'"
对我来说这似乎是一个 "smart quotes" 问题:
When I touch the “Skip Login” button
那些不是普通的双引号 "
.
由于您没有在步骤定义中使用正则表达式,我建议这样做:
Given I am on the Login Screen
When I touch the Skip Login button
Then I should see the Main Screen
When(/^I touch the Skip Login button$/) do
tap_mark 'skip_login'
end
我是 calabash 的新手,我正在尝试 运行 测试,calabash 识别出我的第一步并通过了,但是对于第二步我遇到了未定义的方法错误,
我的特征文件是:
Feature: Sign-in page
Scenario: Go to dashboard with skip login
Given I am on the Login Screen
When I touch the “Skip Login” button
Then I should see the Main Screen
我的 rb 文件是
Given(/^I am on the Login Screen$/) do
element_exists("button marked:'authenticate'")
end
When(/^I touch the "Skip Login" button$/) do
tap_mark 'skip_login'
end
Then(/^I should see the Main Screen$/) do
wait_for_elements_exist("label text: 'HeaderText'")
end
当它到达 "When" 步骤时,应用程序在我的 phone 上关闭。 有人可以帮我解决这个问题吗?
输出为:
Given I am on the Login Screen # features/step_definitions/calabash
_steps.rb:1 当我触摸 "Skip Login" 按钮时 # features\my_first.feature:4 然后我应该看到主屏幕 # features/step_definitions/calabash _steps.rb:9
1 个场景(1 个未定义) 3 个步骤(1 个跳过,1 个未定义,1 个通过) 0m22.691s
您可以使用这些代码段为未定义的步骤实施步骤定义:
当(/^我触摸"Skip Login"按钮$/)时 pending # 用你希望的代码表达上面的正则表达式 结束
更详细一点,如果我走第二步而不是第一步,它会按button.I无法理解为什么会这样,为什么不做第二步
首先,请参阅 logcat 了解应用程序崩溃的详细信息。
我认为你是 运行 一个非常老的 Calabash 版本-Android。在较新的版本中,无效查询永远不会使应用程序崩溃。 wait_for_elements_exist("label text: 'HeaderText'")
会使应用程序在旧版本的 Calabash-Android 中崩溃,因为您在 text:
之后有一个 space,这是无效的。
较新版本的 Calabash-Android 会引发 Ruby 错误,告诉您查询格式错误。
你的测试输出会很好。但除此之外,您还输入了
tap_mark 'skip_login'
因此它将尝试查找具有该确切文本的文本。但是根据您的功能文件,我猜测您在按钮上实际拥有的是
Skip Login
因此 tap_mark 命令失败。
这只是一个猜测,但是 "skip_login" 是按钮的 ID 吗?如果您想使用它来决定点击什么,请执行类似
的操作touch "button id:'skip_login'"
对我来说这似乎是一个 "smart quotes" 问题:
When I touch the “Skip Login” button
那些不是普通的双引号 "
.
由于您没有在步骤定义中使用正则表达式,我建议这样做:
Given I am on the Login Screen
When I touch the Skip Login button
Then I should see the Main Screen
When(/^I touch the Skip Login button$/) do
tap_mark 'skip_login'
end