Selenium'da Javascript kodunun dönüş değerini alma


104

Web sitemin bazı otomatik testleri için Selenium2 kullanıyorum ve bazı Javascript kodlarının dönüş değerini alabilmek istiyorum. foobar()Web sayfamda bir Javascript işlevi varsa ve onu çağırmak ve Python koduma dönüş değerini almak istersem, bunu yapmak için ne arayabilirim?

Yanıtlar:


168

Bir değer döndürmek returniçin, execute_script()yönteme iletilen dizede JavaScript anahtar kelimesini kullanmanız yeterlidir , örn.

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

Değişken javascript tarafından tanımlanmamışsa, dönüş değeri ne olur? Bir istisna mı yoksa sadece boş bir dize mi atar?
Alex

değişken tanımlanmamışsaNone
dbJones

7
bu yeniler için hızlı not return_value = wd.execute_script("return {foo: 'bar'}"), döndürülen değeri programınızda daha sonra kullanılmak üzere saklar.
ntk4

1
Doktor bir belirterek yoksun Retruns: not. Teir Kullanım: örnek olmasına rağmen , belge başlığını döndüren bir js koyarlar. Geri Döndürmeleri açıkça belirtmek daha iyidir: kendi belgelerinde
woodz

8

Aşağıdaki örnek kodda olduğu gibi kod parçacığınızı bir işlev olarak yazmamış olsanız bile, sadece var'ın return var;döndürmek istediğiniz değişkeni sonuna ekleyerek değerleri döndürebilirsiniz.

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

resultURLsbu durumda olan diziyi içerecektir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.