Selenium + firefox:空的execute_script参数

时间:2015-01-19 18:37:23

标签: javascript python firefox selenium selenium-webdriver

我正在尝试使用javascript而不是send_keys()方法设置textarea值。

正如文档所说,我应该能够将webelement传递给execute_script作为参数,并通过arguments数组引用此参数。但是,我已经检查了firefox js控制台,arguments是Object,并且我把它作为execute_script参数放在哪里并不重要 - arguments总是一个空对象。

>>>> web = webdriver.Firefox()
>>>> web.get("http://somepage.com")
>>>> element = web.find_element_by_tag_name("textarea")
>>>> web.execute_script("return typeof(arguments)", element)
u'object'
>>> web.execute_script("return arguments",element)
[]

任何人都有类似主题的经验吗?如何将webElement作为javascript的参数?

使用Firefox 35.0,selenium 2.44.0。

2 个答案:

答案 0 :(得分:5)

以下是相关错误:Firefox 35: Passing arguments to executeScript isn't working

今天发布的selenium 2.45修正了升级selenium软件包

pip install --upgrade selenium

旧答案:

我能够使用selenium==2.44.0Firefox 35.0重现问题:

>>> element = web.find_element_by_tag_name('textarea')
>>> web.execute_script("return arguments",element)
[]

降级为Firefox 34.0.5 解决了这个问题:

>>> element = web.find_element_by_tag_name('textarea')
[<selenium.webdriver.remote.webelement.WebElement object at 0x1022d1bd0>]

答案 1 :(得分:3)

Selenium无法再使用Firefox中的传递参数执行javascript,从版本35开始.Selenium已经能够通过一种称为__exposedProps__的后门传递参数。作为整体收紧外部绑定界面的一部分(以及一些繁忙的工作,由他们从谷歌提供的所有资金资助),他们弃用,然后删除了这个界面。他们的意图记录在deprecation notice in mid-2014中。 Selenium bug #8390涵盖了它,但我认为这让开发团队感到意外,我还没有看到任何活动迁移到另一个界面,我认为这将是WebIDL。< / p>

它不会影响其他浏览器,但Firefox是迄今为止使用Selenium进行测试的最快捷,最简单的方法。目前,我们网络测试人员的最佳选择是降级至Firefox 34并关闭自动更新,直至获得解决方案。