Pobieranie wartości zwracanej kodu JavaScript w Selenium


104

Używam Selenium2 do niektórych zautomatyzowanych testów mojej witryny i chciałbym mieć możliwość uzyskania wartości zwracanej przez kod JavaScript. Jeśli mam funkcję foobar()Javascript na mojej stronie internetowej i chcę ją wywołać i uzyskać wartość zwracaną do mojego kodu Pythona, co mogę wywołać, aby to zrobić?

Odpowiedzi:


168

Aby zwrócić wartość, wystarczy użyć returnsłowa kluczowego JavaScript w ciągu przekazanym do execute_script()metody, np

>>> 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'

jeśli zmienna nie jest zdefiniowana przez javascript, jaka byłaby wartość zwracana? Czy zgłasza wyjątek, czy po prostu pusty ciąg?
Alex

jeśli zmienna nie jest zdefiniowana, zwracaNone
dbJones

7
krótka uwaga dla tych newbs, zapisze return_value = wd.execute_script("return {foo: 'bar'}")zwróconą wartość do późniejszego wykorzystania w programie.
ntk4

1
doc brakuje Określanie Retruns: notatka. Chociaż w teir Usage: sample wstawili js, który zwraca tytuł dokumentu. Lepiej jednoznacznie określić Retruns: w ich dokumencie
woodz

8

Możesz zwracać wartości, nawet jeśli nie masz wyciętego kodu zapisanego jako funkcja, jak w poniższym przykładowym kodzie, po prostu dodając return var;na końcu, gdzie zmienna jest zmienną, którą chcesz zwrócić.

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

resultbędzie zawierać tablicę, która jest w URLstym przypadku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.