【问题标题】:"is not a function" error when calling a method from basic pageobject page in WebdriverIO从 WebdriverIO 中的基本 pageobject 页面调用方法时出现“不是函数”错误
【发布时间】:2018-01-04 10:37:36
【问题描述】:

我一直在使用页面对象模式和 WebdriverIO 并尝试声明将在子页面中继承的选择器。这两个我都试过了

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()吗?

标签: javascript node.js automated-tests pageobjects webdriver-io


【解决方案1】:

当您调用checkoutPage.loader.waitForVisible(5000, true) 时,您实际上返回的是整个loader 函数而不是元素。

将其更改为 checkoutPage.loader().waitForVisible(5000, true);,您的第一个示例应该可以正常工作。

【讨论】:

  • 成功了,谢谢!如果我像这样在 checkoutPage 中覆盖加载程序,任何解释为什么它在没有括号的情况下工作?如果我必须在子页面中覆盖加载器,我不想更改测试本身。 var checkoutPage = Object.create(page, { loader: {get: function() {return $("div[class*='loading'] svg");}} }) module.exports = checkoutPage;
  • 是的,因为当您使用 getter 时,您会将属性绑定到在您引用该属性时调用的函数。因此,当您使用 get 时,该函数实际上是在您调用 checkoutPage.loader 并返回您的元素时执行的。它与您在问题中发布的代码不同。你可以在这里读更多关于它的内容。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
相关资源
最近更新 更多