Javascript:修改代码以向数组/列表添加元素
大家好,
我是一名刚接触Javascript的新手。我想修改一些现有的代码,不是返回元素的数量,而是把每个指定的元素添加到一个数组或列表中。
这是来自Selenium CSS计数器的原始代码:
private int getCSSCount(String aCSSLocator){
String jsScript = "var cssMatches = eval_css(\"%s\", window.document);cssMatches.length;";
return Integer.parseInt(selenium.getEval(String.format(jsScript, aCSSLocator)));
}
然后我还需要把代码转换成Python,这个我比较熟悉。
def count_css_matches(self, css_locator):
java_script_code = '''
var cssMatches = eval_css("%s", window.document);
cssMatches.length;''' % css_locator
return int(self.selenium.get_eval(java_script_code))
但是把原始代码改成返回数组而不是一个整数的地方让我卡住了。
谢谢大家的帮助,下面是我在Python中运行时遇到的错误。
追踪信息(最近的调用最后): "D:\Temp\1TestingApps\Selenium\SeleniumRC\selenium-python-client-driver-1.0.1\selenium.py",第1218行,在get_eval中 return self.get_string("getEval", [script,]) 文件 "D:\Temp\1TestingApps\Selenium\SeleniumRC\selenium-python-client-driver-1.0.1\selenium.py",第219行,在get_string中 result = self.do_command(verb, args) 文件 "D:\Temp\1TestingApps\Selenium\SeleniumRC\selenium-python-client-driver-1.0.1\selenium.py",第215行,在do_command中 raise Exception, data 异常:错误:抛出异常:参数列表后缺少)
2 个回答
我不太清楚 eval_css
是怎么工作的,但如果它把一组字符串放进 cssMatches
里,而你又可以用 get_eval
得到一个字符串,而不是列表,那你就应该在 JavaScript 的范围内把这个列表转成 JSON 格式,这样就能把它作为字符串传到 Python 里,然后用 simplejson
把它转换成 Python 的原生列表。
大概是这样的吧:
import json
def count_css_matches(self, css_locator):
java_script_code = '''
var cssMatches = eval_css("%s", window.document);
JSON.stringify(cssMatches.length);''' % css_locator
return json.loads(self.selenium.get_eval(java_script_code)))
我不知道你是否需要在 JavaScript 代码里加一个返回值、document.write,或者其他什么东西来获取这个字符串。如果需要的话,请留言告诉我,我会把它加到代码里 :-)
祝你好运!
如果你更新一下你的Python绑定,就能解决这个问题。你可以用这个命令:pip install -U selenium