Ruby 带有页面对象模式的非帮助性错误消息葫芦
我目前正在使用葫芦框架来自动化本地Android和IOS应用程序的功能测试。在我研究它的过程中,我偶然发现Xamarin使用了页面对象设计模式,我发现用Selenium方式组织代码会更好 我对原始项目做了一些调整,在葫芦项目结构的support目录中添加了一个名为page_utils.rb的文件。此文件具有以下方法:Ruby 带有页面对象模式的非帮助性错误消息葫芦,ruby,calabash,pageobjects,calabash-ios,calabash-android,Ruby,Calabash,Pageobjects,Calabash Ios,Calabash Android,我目前正在使用葫芦框架来自动化本地Android和IOS应用程序的功能测试。在我研究它的过程中,我偶然发现Xamarin使用了页面对象设计模式,我发现用Selenium方式组织代码会更好 我对原始项目做了一些调整,在葫芦项目结构的support目录中添加了一个名为page_utils.rb的文件。此文件具有以下方法: def change_page(next_page) sleep 2 puts "current page is #{current_page_name} changin
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中更改页面的事件,并更新调用此方法的葫芦的引用,例如:
@current_page.click_to_home_page
change_page(HomePage)
PAGE_TRANSITION_参数是一个包含超时等参数的哈希:
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是为我的应用程序中第一个屏幕的特征定义的id,我不明白为什么它会在屏幕前面的几步中不断出现,从而掩盖了真正的问题。
有人能帮我摆脱这种烦恼吗?调试测试失败非常困难,特别是在测试云上。欢迎使用葫芦
如您所知,当您尝试查询/等待屏幕上找不到的元素时,您将获得等待元素的超时:
异常。当您调用page.wait(opts)
时,它实际上是在调用wait\u for\u elements\u exist([trait],opts)
,这意味着在等待10秒后,在屏幕上找不到id为btn\u ok
的视图
什么是assert\u info\u present
?它是否调用等待\u元素\u存在
或类似的东西?更重要的是,在page_utils.rb:14
中实际调用了什么方法
当你调用点击主页时,你的应用程序是否真的返回到主屏幕
不幸的是,如果没有更多信息,很难诊断问题,但我会给出一些建议:
在没有看到您的应用程序或步骤定义的情况下,我的第一个猜测是@current\u页面。单击\u to\u home\u页面
实际返回主页需要10秒以上的时间。如果是这种情况,只需增加超时时间(或者完全删除超时时间,因为默认值为30秒)
我的第二个猜测是,当应用程序返回主屏幕时,id为btn_ok
的元素实际上在屏幕上不可见。如果是这种情况,您可以尝试将trait
定义从*id:'btn\u ok'
更改为all*id:'btn\u ok'
(all
操作符将包括在屏幕上实际不可见的视图)。再说一次,我不知道你的应用程序看起来像什么,所以很难说
我的第三个猜测是它与assert\u info\u present
有关,但很难说没有看到步骤defs
另一方面,如果我们的示例代码有点过时,我深表歉意,但在撰写本文时,我们通常不鼓励使用@current_page
来跟踪页面。葫芦是以或多或少无状态的方式编写的,我们通常鼓励步骤定义尽可能避免使用状态
希望这有帮助!祝你好运 欢迎来到葫芦
如您所知,当您尝试查询/等待屏幕上找不到的元素时,您将获得等待元素的超时:
异常。当您调用page.wait(opts)
时,它实际上是在调用wait\u for\u elements\u exist([trait],opts)
,这意味着在等待10秒后,在屏幕上找不到id为btn\u ok
的视图
什么是assert\u info\u present
?它是否调用等待\u元素\u存在
或类似的东西?更重要的是,在page_utils.rb:14
中实际调用了什么方法
当你调用点击主页时,你的应用程序是否真的返回到主屏幕
不幸的是,如果没有更多信息,很难诊断问题,但我会给出一些建议:
在没有看到您的应用程序或步骤定义的情况下,我的第一个猜测是@current\u页面。单击\u to\u home\u页面
实际返回主页需要10秒以上的时间。如果是这种情况,只需增加超时时间(或者完全删除超时时间,因为默认值为30秒)
我的第二个猜测是,当应用程序返回主屏幕时,id为btn_ok
的元素实际上在屏幕上不可见。如果是这种情况,您可以尝试将trait
定义从*id:'btn\u ok'
更改为all*id:'btn\u ok'
(all
操作符将包括在屏幕上实际不可见的视图)。再说一次,我不知道你的应用程序看起来像什么,所以很难说
我的第三个猜测是它与assert\u info\u present
有关,但很难说没有看到步骤defs
另一方面,如果我们的示例代码有点过时,我深表歉意,但在撰写本文时,我们通常不鼓励使用@current_page
来跟踪页面。葫芦是以或多或少无状态的方式编写的,我们通常鼓励步骤定义尽可能避免使用状态
希望这有帮助!祝你好运 再次您好@Christophentes您总是对我的问题很有帮助+1美元。方法assert\u info\u present
只是一种方法,它检查页面对象提供的ids数组在屏幕上是否存在和可见一些ID。我已经在最近的测试中对此进行了评论。关于你的猜测,我不这么认为