我正在尝试使用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。
答案 0 :(得分:5)
以下是相关错误:Firefox 35: Passing arguments to executeScript isn't working。
今天发布的selenium 2.45修正了升级selenium软件包:
pip install --upgrade selenium
旧答案:
我能够使用selenium==2.44.0
和Firefox 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并关闭自动更新,直至获得解决方案。