Selenium+firefox: empty execute_script arguments

梦想与她 提交于 2020-01-29 09:04:55

问题


I'm trying to set textarea value using javascript instead send_keys() method.

As documentation says, I should be able to pass webelement to execute_script as parameter and refer to this parameter via arguments array. However, I've checked in firefox js console, that arguments is Object and it doesn't matter what i put as execute_script argument - arguments is always an empty object.

>>>> 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)
[]

Anyone has any experience with similarly subject? How can I put webElement as argument for javascript?

Using Firefox 35.0, selenium 2.44.0.


回答1:


Here is the relevant bug: Firefox 35: Passing arguments to executeScript isn't working.

Which was fixed in selenium 2.45 which was released today, upgrade selenium package:

pip install --upgrade selenium

Old answer:

I was able to reproduce the problem using selenium==2.44.0 and Firefox 35.0:

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

Downgrading to Firefox 34.0.5 solved the issue:

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



回答2:


Selenium can no longer execute javascript with passed parameters in Firefox, as of version 35. Selenium has been able to pass in arguments via a kind of backdoor known as __exposedProps__. As part of an overall tightening up of the external bindings interface (and some busywork, financed by all of that money they made from Google), they deprecated, and then removed, this interface. Their intention was documented in a deprecation notice in mid-2014. Selenium bug #8390 covers it, but I take it this caught the dev team by surprise and I don't see any activity to migrate to another interface yet, which I presume will be WebIDL.

It doesn't affect other browsers, but Firefox is by far the quickest and easiest method of testing with Selenium. Currently, the best option for us web testers is to just downgrade to Firefox 34 and turn off automatic updates until a resolution is available.



来源:https://stackoverflow.com/questions/28031404/seleniumfirefox-empty-execute-script-arguments

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!