Получение возвращаемого значения кода Javascript в Selenium

104

Я использую Selenium2 для некоторых автоматических тестов своего веб-сайта, и я хотел бы получить возвращаемое значение некоторого кода Javascript. Если у меня есть foobar()функция Javascript на моей веб-странице, и я хочу вызвать ее и получить возвращаемое значение в свой код Python, что я могу позвонить для этого?

Эли Кортрайт
источник

Ответы:

168

Чтобы вернуть значение, просто используйте returnключевое слово JavaScript в строке, переданной execute_script()методу, например

>>> 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, каким будет возвращаемое значение? Возникает ли исключение или просто пустая строка?
Alex
если переменная не определена, возвращаетсяNone
dbJones,
7
быстрое примечание для новичков, return_value = wd.execute_script("return {foo: 'bar'}")сохранит возвращаемое значение, которое будет использоваться позже в вашей программе.
ntk4
1
в документе отсутствует указание Retruns: note. Хотя в примере использования: они помещают js, который возвращает заголовок документа. Лучше явно указать Retruns: в их документе
woodz
8

Вы можете возвращать значения, даже если у вас нет фрагмента кода, написанного как функция, как в приведенном ниже примере кода, просто добавив return var;в конце, где var - это переменная, которую вы хотите вернуть.

result = driver.execute_script('''
cells = document.querySelectorAll('a');
URLs = [];
[].forEach.call(cells, function (el) {
    URLs.push(el.href)
});
return URLs
''')

resultбудет содержать массив, который есть в URLsэтом случае.

Эдуард Флоринеску
источник