【发布时间】:2016-03-11 09:36:21
【问题描述】:
我目前正在使用 Calabash 框架来自动化原生 Android 和 IOS 应用程序的功能测试。在我研究它的过程中,我偶然发现了来自 Xamarin 的 this example project,它使用了页面对象设计模式,我发现这种模式可以更好地以 Selenium 方式组织代码。
我对原项目做了一些调整,在calabash项目结构的support目录下添加了一个名为page_utils.rb的文件。这个文件有这个方法:
def change_page(next_page)
sleep 2
puts "current page is #{current_page_name} changing to #{next_page}"
@current_page = page(next_page).await(PAGE_TRANSITION_PARAMETERS)
sleep 1
capture_screenshot
@current_page.assert_info_present
end
所以在我的自定义步骤实现中,当我要更改页面时,我会在 UI 中触发更改页面的事件并更新 Calabash 调用此方法的引用,例如:
@current_page.click_to_home_page
change_page(HomePage)
PAGE_TRANSITION_PARAMETERS 是带有超时等参数的哈希:
PAGE_TRANSITION_PARAMETERS = {
timeout: 10,
screenshot_on_error: true
}
碰巧的是,每当我在测试运行期间等待任何屏幕中的任何元素超时时,我都会收到一条通用错误消息,例如:
Timeout waiting for elements: * id:'btn_ok' (Calabash::Android::WaitHelpers::WaitError)
./features/support/utils/page_utils.rb:14:in `change_page'
./features/step_definitions/login_steps.rb:49:in `/^I enter my valid credentials$/'
features/04_support_and_settings.feature:9:in `And I enter my valid credentials'
btn_ok 是为我的应用程序中第一个屏幕的 trait 定义的 id,我不明白为什么即使在该屏幕之前的步骤中也会不断弹出,掩盖了真正的问题。 任何人都可以帮助摆脱这种烦恼吗?导致非常困难的调试测试失败,特别是在测试云上。
【问题讨论】:
标签: ruby calabash pageobjects calabash-ios calabash-android