我目前有一个正在进行的自动化项目,我希望向该自动化项目中添加自定义命令,以使我的代码变得更简洁,更高效。
在网上寻找解决问题的资源后,我遇到了内置在webDriverio中的“ addCommand”功能。但是,当我尝试使用此功能时,无法添加自定义的“单击”命令,该命令不允许自动化程序先等待该元素变得可见,然后再对其执行单击操作。这是我当前拥有的代码。
我目前将此代码写在wdio.conf.js配置文件中的“ before”钩子中。
browser.addCommand("click", function (selector) {
let result;
try {
if (!selector) {
// SOME CODE HERE TO WAIT FOR ELEMENT TO BE VISIBLE
// NOTHING SEEMS TO WORK
// this.waitForVisible() does not work
// browser.waitForVisible(this.element().selector.toString())
// does not work either
result = this.elementIdClick();
}
else {
browser.element(selector).waitForExist();
// if it is browser.click
browser.element(selector).waitForVisible();
result = browser.element(selector).click();
}
} catch (err) {
throw err;
}
return result;
}, true);
我认为这里的问题与浏览器对象有关,可能不确定“ addCommand”函数内部的范围。
我遵循了tutorial,并从那里借了代码。那里的示例代码可以正常工作,但是不包括等待元素可见/存在的部分。我对代码进行了一些修改以尝试包括该部分,但是这样做没有成功。
我也很好奇为什么在本教程中代码“ this.elementIdClick(this.element()。value.ELEMENT);”仅在执行“ this.element()。click()”时使用,否则this.click()无法正常工作。如果有人可以向我解释,将不胜感激!
注意:我正在使用webdriverIO v4。我知道在v5中可能会为此进行一些工作,但是由于我正在使用CucumingJS框架,因此必须坚持使用v4,直到对v5的CucumingJS支持消失为止。
任何帮助将不胜感激。预先感谢!