【问题标题】:Getting the return value of Javascript code in Selenium在 Selenium 中获取 Javascript 代码的返回值
【发布时间】:2011-07-31 22:00:57
【问题描述】:

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

【问题讨论】:

    标签: javascript python selenium selenium-webdriver


    【解决方案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 这种情况下的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      相关资源
      最近更新 更多