WebdriverIO功能可重用性模式

时间:2019-03-06 18:21:08

标签: webdriver-io reusability ui-testing

我正在从Selenium过渡到WebdriverIO,并且在功能可重用性方面遇到了一些困难。让我用一个例子来演示:

<nav>
  <div><a>Clients</a></div>
  <div><a>Accounts</a></div>
  <div><a>Packages</a></div>
</nav>

让我说我有一个上面有3个链接的导航栏。当我进入此页面时,我想检查每个链接是否存在。我的函数可能看起来像这样:

class LoginPage extends Page {

  get clientsLink() { return $('//a[contains(., "Clients")]'); }


  isTabDisplayed() {
    if (this.clientsLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }
}

这很好,除了我必须为AccountsPackages再写2个getter,所以我的课看起来像这样:

class LoginPage extends Page {

  get clientsLink() { return $('//a[contains(., "Clients")]'); }
  get accountsLink() { return $('//a[contains(., "Accounts")]'); }
  get packagesLink() { return $('//a[contains(., "Packages")]'); }

  isClientTabDisplayed(tab) {
    if (this.clientsLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }

  isAccountsTabDisplayed(tab) {
    if (this.accountsLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }

  isPackagesTabDisplayed(tab) {
    if (this.packagesLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }
}

这时,我的焦虑开始了,我开始思考可以重用isTabDisplayed函数的方法,在该函数中,我可以使用制表符名称或类似的方式将字符串传递给getter。

不幸的是,吸气剂不接受参数,到目前为止,我还没有在Google上找到任何可以帮助我解决此问题的资源(最常见的是页面对象模型,它似乎无法解决该问题)

我的思维过程是否与我在UI测试中争取可重用代码的努力背道而驰?或者我不是在搜寻正确的模式吗?

1 个答案:

答案 0 :(得分:1)

WebdriverIO中的页面对象只是普通的ES6类。浏览一下ES6类的文档,以了解如何创建可以将参数传递给的函数。

现在,话虽如此,您在这里所做的事情不是必需的。除了创建一个引用吸气剂的函数之外,为什么不直接在测试中直接引用该吸气剂呢?

const login = new LoginPage();
const isAccountsTabDisplayed = login.accountsLink.isDisplayed();

真的没有理由为此创建包装函数。