2011-03-04 35 views
9

我一直在使用urllib2访问网页,但它不支持JavaScript,所以我看了一下Selenium,但即使阅读过它的文档,我也很困惑。Python中的硒

我下载了Firefox的Selenium IDE插件,我尝试了一些简单的东西。

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() 

我刚刚访问wikipedia.org和类型太平洋在搜索领域,但是当我尝试编译它,它给了我很多的错误。

+1

这些错误是什么? – MAK 2011-03-04 20:32:21

+0

我跑了你的脚本没有问题。在运行脚本之前是否启动了硒服务器? – unutbu 2011-03-04 20:42:35

+0

Selenium服务器?我只下载了Selenium Client Driver和Selenium IDE。 – sophiaw 2011-03-04 21:21:00

回答

6

如果运行在[Errno 111] Connection refused错误的脚本结果像这样:

% 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) 

则解决方案是最有可能的,你需要得到硒服务器首先运行。

在下载SeleniumRC时,会发现一个名为selenium-server.jar的文件(截至几个月前,该文件位于SeleniumRC/selenium-server-1.0.3/selenium-server.jar)。

在Linux上,你可以用命令

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

你会发现关于如何设置服务器here更完整的说明在后台运行硒服务器。

1

我建议你使用一个webdriver,你可以在这里找到它:http://code.google.com/p/selenium/downloads/list。如果你想以编码器的形式编写测试(而不是使用鼠标),那么这种情况会比你尝试使用的RC版本更好,至少因为它不会问你一个SeleniumRC Jar实例。您只需拥有浏览器的二进制文件或使用已安装在系统上的那些文件,例如Firefox。

-1

我在我的项目中遇到了这个问题,发现问题出在几个webdriver.get调用之间,它们之间的时间间隔非常短。我的修复不是延迟,只是删除不需要的调用和错误消失。希望,它可以帮助别人。