我正在用JavaScript为WebdriverIO构建一个自动化框架.

"开箱即用"错误消息没有太大帮助,我想将类名和方法名作为前缀添加到错误消息中,该错误消息在方法/函数失败时抛出.

我已经设法用ClassName.name个字母来称呼这个班

然而,我还没有找到一种不使用硬编码值就引用方法名的解决方案.

下面是我想做的更改的摘要.

之前:

setElementValue(element, value){
    try{
        this.waitForElementAndScroll(element);
        $(element).setValue(value);
    }
    catch(error){
        throw `${BasePage.name}.setElementValue: ${error.message}`;
    }
}

之后:

setElementValue(element, value){
    try{
        this.waitForElementAndScroll(element);
        $(element).setValue(value);
    }
    catch(error){
        throw `${BasePage.name}.${setElementValue.name}: ${error.message}`;
    }
}

其中${setElementValue.name}是引用方法/函数名称的方法.

非常感谢!

我try 过以下方法,但没有成功:

method.name //ReferenceError: method is not defined

(method).name //ReferenceError: method is not defined

Function.name //Returns "Function"

Function.value //Returns "undefined"

constructor.name //Returns "Object"

setElementValue.name //ReferenceError: setElementValue is not defined

推荐答案

我发现这个(非常明显的)解决方案适合我:

this.setElementValue.name

其中抛出的错误消息是:

throw `${BasePage.name}.${this.setElementValue.name}: ${error.message}`;

当方法失败时,将输出以下错误日志(log):

`BasePage.setElementValue: element ("#submit-button") still not displayed after 500ms`

Javascript相关问答推荐

jsfat的黑色画布输出

如何在Jest中调用setupFile下列出的文件所需的函数?

使用JavaScript更改json值顺序

使用Apps Script缩短谷歌表中的URL?

JavaScript:循环访问不断变化的数组中的元素

一次仅播放一个音频

确定MutationRecord中removedNodes的索引

docx.js:如何在客户端使用文档修补程序

Promise Chain中的第二个useState不更新

JSDoc创建并从另一个文件导入类型

如何控制Reaction路由加载器中的错误状态?

无法使用单击按钮时的useState将数据从一个页面传递到另一个页面

JS:XML insertBefore插入元素

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

如何在Node.js中排除导出的JS文件

如何在HTMX提示符中设置默认值?

第一项杀死下一项,直到数组长度在javascript中等于1

为什么在函数中添加粒子的速率大于删除粒子的速率?

无法读取未定义的属性(正在读取合并)-react RTK

如何在FiRestore中的事务中使用getCountFromServer