在 Selenium 中获取 Javascript 代码的返回值
Posted
技术标签:
【中文标题】在 Selenium 中获取 Javascript 代码的返回值【英文标题】:Getting the return value of Javascript code in Selenium 【发布时间】:2011-07-31 22:00:57 【问题描述】:我正在使用 Selenium2 对我的网站进行一些自动化测试,并且我希望能够获得一些 javascript 代码的返回值。如果我的网页中有一个 foobar()
Javascript 函数,我想调用它并将返回值放入我的 Python 代码中,我可以调用什么来做到这一点?
【问题讨论】:
【参考方案1】:要返回一个值,只需在传递给execute_script()
方法的字符串中使用return
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定义的,返回值是什么?是抛出异常还是只是一个空字符串? 如果变量没有定义,则返回None
对于那些新手来说,return_value = wd.execute_script("return foo: 'bar'")
将存储返回的值以供以后在您的程序中使用。
doc 缺少指定 Returns: 注释。尽管在 teir Usage: 示例中,他们放置了一个返回文档标题的 js。最好在他们的文档中明确指定 Reruns:【参考方案2】:
即使您没有像下面的示例代码那样将代码的 sn-p 编写为函数,也可以返回值,只需在 var 是您要返回的变量的末尾添加 return var;
即可。
result = driver.execute_script('''
cells = document.querySelectorAll('a');
URLs = [];
[].forEach.call(cells, function (el)
URLs.push(el.href)
);
return URLs
''')
result
将包含 URLs
这种情况下的数组。
【讨论】:
以上是关于在 Selenium 中获取 Javascript 代码的返回值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 selenium 获取带有 javascript 呈现的源代码的 html
使用 Selenium / Protractor 进行测试时从网站获取注入的 javascript
如何使用 Selenium/Python 获取由 JavaScript 编写的 html 内容 [重复]