我正在测试一个建立在Magento店面上的内部网站。在结帐过程中,表单的某些部分将被隐藏(样式:无),直到填写上一部分。这些部分通常会破坏脚本,但是对隐藏表单的第一个元素使用when_present解决了这个问题。
但是,提交订单按钮对这些相同的方法效果不佳。我今天与我们的首席开发人员合作,验证此按钮与之前的表单按钮之间的唯一区别是加载了新页面(新的URL,浏览器中的新“完成”状态)。
要清楚:
以下是表单的有些伪代码,以及提交点击:
def complete_form(data = {})
data = DEFAULT_DATA.merge (data)
select_guest
continue_button.click #proceed to billing panel
enter_billing_and_shipping_info(data)
enter_additional_information(data)
place_order_button.when_present.click #submit form
#sleep 2 #this succeeds, but is undesirable
thank_you_message.wait_until_present #I do not actually appear to wait until anything is present
end #
def enter_billing_and_shipping_info(data)
billing_first_name.when_present.value = data['First Name'] #I work!
billing_last_name.value = data['Last Name']
#more fields
end #
从步骤:
thank_you_message.should include("Yippee")
脚本以两种不同的方式失败,具体取决于网站响应的速度:
其他方法如Watir :: Wait.until或直到{},都会导致相同的行为。
更新8-15 尝试解决方案#1:
place_order_button.when_present.click #complete form
ajax_submit_image.wait_while_present
相同的最终结果 - 脚本终止但未找到成功消息,屏幕截图显示了旋转中间的Ajax加载图像。这和前一种方法都应该有效,但似乎没有效果。我确实可以使用脚本中的定位器(img src match)来访问图像。
答案 0 :(得分:2)
您是否考虑使用“加载动画”(可能只是动画gif或类似动画)来了解您应该继续等待?
我在我的一些脚本中使用了这种方法,其中动画只是一个简单的图形文件,客户端javascript使其可见或不可见。所以我的等待循环包括一个短暂的睡眠,并检查动画是否仍然存在,一旦它消失就退出。
答案 1 :(得分:1)
值得考虑的一个选项是在应用程序本身中请求标志的可测试性功能,以便让您知道异步进程是否正在运行。在我测试的一个AJAX密集的Web应用程序中,每当XRH或计时器启动时,我们在body标签上设置一个属性,如AjaxStarted,并且XHR或计时器所做的最后一件事就是将该属性设置为AjaxStopped。这样,在任何情况下(即使可能有多个异步进程正在进行中,我有一个简单的方法来调用,看看我是否应继续前进。
您可以阅读我们所做的详情以及我们在此尝试的其他一些解决方案: http://testingjeff.wordpress.com/2009/10/21/relief-for-the-pain-of-waiting-for-ajax-elements-on-the-page/