【发布时间】:2018-03-08 01:03:24
【问题描述】:
我在这个网站上查看了“无效的正则表达式标志”是什么以及它出现在 JavaScript 中的原因,但这种特殊情况似乎与现有问题不匹配。
我正在为 Robot Framework 开发一个基于 JavaScript 的关键字(https://codereview.stackexchange.com/questions/175683/user-friendly-robot-framework-keywords-written-in-javascript,它不完全一样,但它使用调用 JavaScript 代码的相同方法)。这是我正在使用的代码。机器人框架关键字:
Click By Text
[Arguments] ${text} ${iteration}=1
${tag} = Execute Javascript ${ABS_PATH}/${PROJECT}/External/ClickByText.js.ClickByText(${text}, ${iteration});
Click Element ${tag}
还有整个 JavaScript 文件。我承认自己是 JavaScript 的菜鸟,这就是为什么我相当肯定这个错误很简单。
function ClickByText(str, desired) {
var all = document.getElementsByTagName("*");
var instance = 0;
var result;
for (var i=0, max=all.length; i < max; i++) {
var thisElement = all[i];
if (thisElement.innerHTML === str) {
instance++;
if (instance === desired) {
result = "document.getElementsByTagName(\"*\")[" + i + "]";
break;
}
}
}
return result;
}
如果您恰好知道如何使该关键字起作用,那就太好了,但我正在专门寻找为什么会出现该错误。因为我正在使用 PyCharm 并像这样运行它,所以我什至不知道我在哪条线路上运行它。
编辑:修复了第 4 行的字符串创建。
编辑:错误的全文:
WebDriverException: Message: unknown error: Runtime.evaluate threw exception: SyntaxError: Invalid regular expression flags
编辑:代码的主要修订。
【问题讨论】:
-
在您提供的代码中,
thisElement是一个字符串,因此没有innerHTML属性。它也不会产生您描述的错误。您的实际代码与您问题中的代码之间一定存在不匹配。 -
如果您实际上是在使用错误方向的斜杠“转义”引号,但
thisElement实际上并不是一个字符串(也就是说,您正在执行类似thisElement = document.getElementsByTagName(/"*/")[i]的操作),那么可以完美地解释它,因为/"*/是一个正则表达式(它匹配零个或多个引号字符),但最后的"不是有效的正则表达式标志(如g或i使正则表达式全局或不区分大小写)。 -
要添加一些与您的评论相关的内容,错误的全文现在已经存在,并且上面的代码与我实际使用的代码相同。如果是这种情况,我将如何使
thisElement成为元素而不是字符串? -
另外,我改变了斜线的方向,结果没有改变。