在Selenium中获取Javascript代码的返回值

IT技术 javascript python selenium selenium-webdriver
2021-02-09 17:16:23

我正在使用 Selenium2 对我的网站进行一些自动化测试,我希望能够获得一些 Javascript 代码的返回值。如果我的foobar()网页中有一个Javascript 函数并且我想调用它并将返回值放入我的 Python 代码中,我可以调用什么来执行此操作?

2个回答

要返回一个值,只需return在传递给execute_script()方法的字符串中使用JavaScript 关键字,例如

>>> from selenium import webdriver
>>> wd = webdriver.Firefox()
>>> wd.get("http://localhost/foo/bar")
>>> wd.execute_script("return 5")
5
>>> wd.execute_script("return true")
True
>>> wd.execute_script("return {foo: 'bar'}")
{u'foo': u'bar'}
>>> wd.execute_script("return foobar()")
u'eli'
如果变量不是由 javascript 定义的,返回值是什么?它是抛出异常还是只是一个空字符串?
2021-03-12 17:16:23
那些新手的快速注释,return_value = wd.execute_script("return {foo: 'bar'}")将存储返回值以供稍后在您的程序中使用。
2021-03-22 17:16:23
文档缺少指定Retruns:注意。尽管在 teir Usage: sample 他们放了一个返回文档标题的 js。最好在他们的文档中明确指定Retruns:
2021-04-04 17:16:23
如果未定义变量,则返回 None
2021-04-11 17:16:23

即使您没有像下面的示例代码那样将代码片段编写为函数,您也可以返回值,只需return var;在最后添加var 是您要返回的变量。

result = driver.execute_script('''
cells = document.querySelectorAll('a');
URLs = [];
[].forEach.call(cells, function (el) {
    URLs.push(el.href)
});
return URLs
''')

result将包含在URLs这种情况下的数组