我正在从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
}
}
}
这很好,除了我必须为Accounts
和Packages
再写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测试中争取可重用代码的努力背道而驰?或者我不是在搜寻正确的模式吗?
答案 0 :(得分:1)
WebdriverIO中的页面对象只是普通的ES6类。浏览一下ES6类的文档,以了解如何创建可以将参数传递给的函数。
现在,话虽如此,您在这里所做的事情不是必需的。除了创建一个引用吸气剂的函数之外,为什么不直接在测试中直接引用该吸气剂呢?
const login = new LoginPage();
const isAccountsTabDisplayed = login.accountsLink.isDisplayed();
真的没有理由为此创建包装函数。