2011-03-04 8 views
9

He estado usando urllib2 para acceder a páginas web, pero no admite javascript, así que eché un vistazo a Selenium, pero estoy bastante confundido incluso después de haber leído sus documentos.Selenium en Python

Descargué el complemento Selenium IDE para Firefox y probé algunas cosas simples.

from selenium import selenium 
import unittest, time, re 

class test(unittest.TestCase): 
    def setUp(self): 
     self.verificationErrors = [] 
     self.selenium = selenium("localhost", 4444, "*chrome", "http://www.wikipedia.org/") 
     self.selenium.start() 

    def test_test(self): 
     sel = self.selenium 
     sel.open("/") 
     sel.type("searchInput", "pacific ocean") 
     sel.click("go") 
     sel.wait_for_page_to_load("30000") 

    def tearDown(self): 
     self.selenium.stop() 
     self.assertEqual([], self.verificationErrors) 

if __name__ == "__main__": 
    unittest.main() 

acabo acceso wikipedia.org y tipo Océano Pacífico en el campo de búsqueda, pero cuando intento compilar, me da una gran cantidad de errores.

+1

¿Cuáles son esos errores? – MAK

+0

Ejecuté su script sin problemas. ¿Comenzó el servidor de selenio antes de ejecutar el script? – unutbu

+0

Selenium Server? Solo descargué Selenium Client Driver y Selenium IDE. – sophiaw

Respuesta

6

Si la ejecución de los resultados de secuencia de comandos en un error de [Errno 111] Connection refused como este:

% test.py 
E 
====================================================================== 
ERROR: test_test (__main__.test) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/unutbu/pybin/test.py", line 11, in setUp 
    self.selenium.start() 
    File "/data1/unutbu/pybin/selenium.py", line 189, in start 
    result = self.get_string("getNewBrowserSession", [self.browserStartCommand, self.browserURL, self.extensionJs]) 
    File "/data1/unutbu/pybin/selenium.py", line 219, in get_string 
    result = self.do_command(verb, args) 
    File "/data1/unutbu/pybin/selenium.py", line 207, in do_command 
    conn.request("POST", "/selenium-server/driver/", body, headers) 
    File "/usr/lib/python2.6/httplib.py", line 898, in request 
    self._send_request(method, url, body, headers) 
    File "/usr/lib/python2.6/httplib.py", line 935, in _send_request 
    self.endheaders() 
    File "/usr/lib/python2.6/httplib.py", line 892, in endheaders 
    self._send_output() 
    File "/usr/lib/python2.6/httplib.py", line 764, in _send_output 
    self.send(msg) 
    File "/usr/lib/python2.6/httplib.py", line 723, in send 
    self.connect() 
    File "/usr/lib/python2.6/httplib.py", line 704, in connect 
    self.timeout) 
    File "/usr/lib/python2.6/socket.py", line 514, in create_connection 
    raise error, msg 
error: [Errno 111] Connection refused 

---------------------------------------------------------------------- 
Ran 1 test in 0.063s 

FAILED (errors=1) 

entonces la solución es más probable que usted necesita conseguir el servidor selenio salir el primero.

En la descarga de SeleniumRC encontrará un archivo llamado selenium-server.jar (desde hace unos meses, ese archivo se encuentra en SeleniumRC/selenium-server-1.0.3/selenium-server.jar).

En Linux, puede ejecutar el servidor de selenio en el fondo con el comando

java -jar /path/to/selenium-server.jar 2>/dev/null 1>&2 & 

Encontrará instrucciones más completas sobre cómo configurar el servidor here.

1

Le sugiero que utilice un controlador de página, lo puede encontrar aquí: http://code.google.com/p/selenium/downloads/list. Si desea escribir pruebas como codificador (y no con el uso del mouse), esa cosa funcionaría mejor que la versión RC que está tratando de usar, al menos porque no le pediría una instancia de Jar SeleniumRC. Simplemente tendrá un binario de un navegador o usará aquellos que ya están instalados en su sistema, por ejemplo, Firefox.

-1

Me enfrenté a este problema en mi proyecto y encontré que el problema estaba en unas pocas llamadas webdriver.get con un intervalo de tiempo muy pequeño entre ellas. Mi solución no fue poner demoras, solo eliminar llamadas innecesarias y el error desaparece. Espero, puede ayudar a alguien.

Cuestiones relacionadas