猴子修补PageObject :: PageFactory#visit_page是个好主意吗?

时间:2013-01-31 21:15:31

标签: ruby monkeypatching page-object-gem

开发人员最近询问我们的测试是否可以在每次打开页面时执行一些javascript。有关详细信息,请参阅bug 44299

执行javascript是微不足道的:

browser.execute_script('return mw.loader.getModuleNames().filter(function (module) { return mw.loader.getState(module) === "error"; }).length === 0;')
#=> true 

我们正在使用page-object#visit_page来打开网页。确保每次打开页面时执行上述示例中的javascript的简单方法是修改#visit_page方法。

alias_method链(来自问题4470108)看起来像是一种简单的方法。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以在名为initialize_page的页面对象类上创建一个方法。页面加载后将立即调用此方法。在该方法中,您可以调用execute_script(页面上的方法)传递您要执行的javascript。

答案 1 :(得分:0)

在我看来,就像你为一些非常简单的事情做了太多的工作。我不确定你使用的是什么框架,但是你有一个应用程序范围的JavaScript文件吗?对于rails应用程序,我会写一个test.js.erb:

<%= %q+browser.execute_script('return mw.loader.getModuleNames().filter(function (module) { return mw.loader.getState(module) === "error"; }).length === 0;')+ if Rails.env.test? %>

并将//= test添加到您的应用清单