Python中的硒
问题描述:
我一直在使用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和类型太平洋在搜索领域,但是当我尝试编译它,它给了我很多的错误。
答
如果运行在[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更完整的说明在后台运行硒服务器。
答
我建议你使用一个webdriver,你可以在这里找到它:http://code.google.com/p/selenium/downloads/list。如果你想以编码器的形式编写测试(而不是使用鼠标),那么这种情况会比你尝试使用的RC版本更好,至少因为它不会问你一个SeleniumRC Jar实例。您只需拥有浏览器的二进制文件或使用已安装在系统上的那些文件,例如Firefox。
答
我在我的项目中遇到了这个问题,发现问题出在几个webdriver.get
调用之间,它们之间的时间间隔非常短。我的修复不是延迟,只是删除不需要的调用和错误消失。希望,它可以帮助别人。
这些错误是什么? – MAK 2011-03-04 20:32:21
我跑了你的脚本没有问题。在运行脚本之前是否启动了硒服务器? – unutbu 2011-03-04 20:42:35
Selenium服务器?我只下载了Selenium Client Driver和Selenium IDE。 – sophiaw 2011-03-04 21:21:00