Javascript &引用;不是一个函数;从WebdriverIO中的基本pageobject页调用方法时出错
我一直在使用页面对象模式和WebDrivero,并试图声明将在子页面中继承的选择器。这两个我都试过了Javascript &引用;不是一个函数;从WebdriverIO中的基本pageobject页调用方法时出错,javascript,node.js,automated-tests,pageobjects,webdriver-io,Javascript,Node.js,Automated Tests,Pageobjects,Webdriver Io,我一直在使用页面对象模式和WebDrivero,并试图声明将在子页面中继承的选择器。这两个我都试过了 function Page() { this.loader = function() { return $("div[class*='loading'] svg"); } } 还有这个 Page.prototype.loader = function() { return $("div[class*='loading'] svg"); } 当我从子页面
function Page() {
this.loader = function() {
return $("div[class*='loading'] svg");
}
}
还有这个
Page.prototype.loader = function() {
return $("div[class*='loading'] svg");
}
当我从子页面调用此函数时,例如
checkoutPage.loader.waitForVisible(5000, true);
我得到“checkoutPage.loader.waitForVisible”不是一个函数错误。我如何声明基本页面的getter以便可以从任何子页面调用它?当调用
checkoutPage.loader.waitForVisible(5000,true)
时,实际上返回的是整个loader
函数,而不是元素
将其更改为
checkoutPage.loader().waitForVisible(5000,true);
您的第一个示例应该工作得很好。它不应该是checkoutPage.loader().waitForVisible()吗
?成功了,谢谢!如果我像这样重写checkoutPage中的加载程序,有没有解释为什么它在没有括号的情况下工作?如果我必须重写子页面中的加载程序,我不想更改测试本身。var checkoutPage=Object.create(页面,{loader:{get:function(){return$([div[class*='loading']svg”);})module.exports=checkoutPage;
是的,因为当您使用getter
时,您将属性绑定到引用该属性时调用的函数。因此,当您使用get
时,函数实际上是在调用checkoutPage.loader
并返回元素时执行的。它的工作方式不同正如您在问题中发布的代码。您可以在此处阅读更多信息。