Отримання зворотного значення коду Javascript у Selenium


102

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

Відповіді:


166

Щоб повернути значення, просто використовуйте 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, що було б значенням повернення? Це кидає виняток або просто порожній рядок?
Алекс

якщо змінна не визначена, вона повертаєтьсяNone
dbJones

7
швидка примітка для цих новичок, return_value = wd.execute_script("return {foo: 'bar'}")зберігає повернене значення, яке буде використане пізніше у вашій програмі.
ntk4

1
у документі відсутня вказівка примітки Retruns: note. Хоча в teir Usage: sample вони ставлять js, який повертає назву документа. Краще чітко вказати Retruns: у їхньому документі
woodz

7

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

result = driver.execute_script('''cells = document.querySelectorAll('a');
URLs = []
console.log(cells);
[].forEach.call(cells, function (el) {
    if(el.text.indexOf("download") !== -1){
    //el.click();
    console.log(el.href)
    //window.open(el.href, '_blank');
    URLs.push(el.href)
    }
});
return URLs''')

resultбуде містити масив, який є в URLsцьому випадку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.